1. 程式人生 > >Python使用中錯誤(持續更新.....)

Python使用中錯誤(持續更新.....)

clas div req mage 技術分享 執行 pan pytho ida

1、在使用requests發送請求,響應數據轉成json提示,沒有可解碼的json

解決辦法:

這是由於,發送請求的數據,存在錯誤,響應出錯比如404 400,所以找不到可以解碼的json

示例如下:

postdata = ‘‘‘{‘userName‘:‘13718651996‘,
            ‘passwd‘:‘yhlxxxx870120‘,
            ‘validateCode‘:‘abc‘,
            ‘rememberMe‘:‘true‘}‘‘‘
url = https://secure.elong.com/passport/ajax/elongLogin
response 
= Session().post(url,data=postdata) print(response.json())

其實從圖上很明顯能看出問題,因為postdata是字符串類型,不是dict字典

如上圖代碼如果執行報如下錯誤:

技術分享

解決辦法,eval()函數將字符串,轉換成字典;如下所示

postdata = ‘‘‘{‘userName‘:‘13718651996‘,
            ‘passwd‘:‘yhlxxxx870120‘,
            ‘validateCode‘:‘abc‘,
            ‘rememberMe‘:‘true‘}‘‘‘
url = 
https://secure.elong.com/passport/ajax/elongLogin request = Session().post(url,data=eval(postdata)) print(request.json())

有人可能會說,你這不是多此一舉嗎?把postdata直接定義成字典不就行了;你說的沒錯確實可以這樣

postdata = {userName:13718651996,
            passwd:yhlxxxx870120,
            validateCode:abc,
            rememberMe
:true} url = https://secure.elong.com/passport/ajax/elongLogin request = Session().post(url,data=postdata) print(request.json())

但是如果以下這串數據,存儲在數據庫中,或者excel中,讀出來的時候默認就是字符串,如果讀出來直接使用就會出現本文的錯誤,

所以哪裏錯了這個要知道,這是一個小細節;調試輸出,發現輸出跟以下是一樣的,

沒有錯呀這是字典呢{‘xxxx‘:‘xxx‘..........},但是它就是字符串。容易被忽略,所以還要使用eval(postdata)函數轉成字典

{userName:13718651996,
            passwd:yhlxxxx870120,
            validateCode:abc,
            rememberMe:true}

正確代碼:

postdata = ‘‘‘{userName:13718651996,
            passwd:yhlxxxx870120,
            validateCode:abc,
            rememberMe:true}‘‘‘
url = https://secure.elong.com/passport/ajax/elongLogin
request = Session().post(url,data=eval(postdata))
print(request.json())

------------------------------我是華麗的分隔線----------------------------------

2、

Python使用中錯誤(持續更新.....)