今天來分享一下我自己如何除錯,出錯很正常(對我來說啦QWQ),但是發現有錯,很重要的是,要知道自己錯在哪裡,所謂「知己知彼,百戰百勝」我自己會分享幾個簡單的技巧方式給夥伴們。
第一種方法就是把想知道的東西都印出來,很多時候可能是小細節,我們沒有注意到,可能是參數的資料型態不對,或者是抓取的資料根本不是你想的那樣,所以我常常會在程式中直接print(變數名稱)
或者是print(type(變數名稱))
,在API裡面這樣寫,我們在Postman測試發送請求的時候,我們可以在輸入指令的cmd(命令指示字元),裡面看到印出來的是甚麼東西。
第二種方法有點像是走迷宮,沿路丟餅乾屑做記號,用註冊API為例子
@csrf_protect
def register(request):
if request.method == "POST":
try:
data = json.loads(bytes.decode(request.body,"utf-8"))
account = data["account"]
password = data["password"]
email = data["email"]
phone = data["phone"]
id = uuid.uuid5(uuid.NAMESPACE_DNS,account)
print("1")
check_account = UserProfile.objects.filter(account=account).first()
print("2")
if check_account is None :
print("3")
user = UserProfile.objects.create_user(id=id,username=account,account=account,email=email,phone=phone)
user.set_password(password)
user.save()
message = {"status" : "註冊成功"}
else :
message = {"status" : "註冊失敗,帳號已註冊"}
except Exception as e:
print(e)
message = {"status" : "error"}
return JsonResponse(message)
我在裡面加了print,也就是印出,我在這裡分別印出1、2、3,如果有一天在測試API的時候有問題,可是不知道卡在哪一行程式的時候,你就可以從記號中發現是哪一行function有問題,一路做記號就像下面這張圖一樣。
第三種方法是把例外印出來,這邊以信箱驗證API為例子,假如我把email_token class 裡 init 的這一行self.salt =str(base64.encodestring(bytes("1_23a48c9710295","utf-8")))
改成 self.salt = base64.encodestring(bytes("1_23a48c9710295","utf-8"))
,因為signing.TimestampSigner參數資料類型產生except,這時候把它印出來就可以看到except的訊息。
except Exception as e:
print(e)
就會像底下這張圖一樣
他告訴我資料型態str和byte沒辦法串在一起
這三種除錯技巧是我自己的習慣使用的,這邊給夥伴們提供參考,明天是鐵人賽最後一天了 !! 終於阿~~~ 明天就輕鬆一下,分享一下我完賽的心得。