python中的Error和Debugging
這是一個微軟python課的筆記記錄
這兩個東西是完全不一樣的事情,我們總把它當做是同義詞,但實際上並不是。
Defining terms(定義術語)
Error handing(錯誤處理)
指的是當代碼運行時有問題,當我把代碼放到生產環境後,是無法雲測的,最常見的例子比如權限問題、數據庫改變和服務關閉等。這些都是無法控制的事情
Debugg(調試)
指的是我知道代碼中有問題,存在出錯的地方,可能會宕掉,而且我知道哪裏出問題導致了代碼出錯
Debuging again(重申調試)
是指知道代碼中存在問題,然後試圖去修復,當程序外部發生一些無無法預測的事情時要使用 try,except,finally方法去解決,
Error types(錯誤類型)
下面是可能的錯誤類型
如果你的代碼出現錯誤,選擇錯誤類型就是很有必要的了
Syntax errors(語法錯誤)
代碼示例:
x=42
y=206
if x==y
print('successful')
運行結果如下:
File "f:/workplace-vsc/one/new.py", line 3
if x==y
^
SyntaxError: invalid syntax
很顯然運行出現了錯誤,但是同時運行的錯誤提示也給出了,是在第3行出現的錯誤。提示說的是無效的語法( invalid syntax ),爲什麼出現這個錯誤呢,其實就是缺少關鍵的字符。
Runtimely errors(運行錯誤)
x=42
y=0
print(x/y)
File "f:/workplace-vsc/one/new.py", line 3, in <module>
print(x/y)
ZeroDivisionError: division by zero
代碼在運行中種出現問題,跑不了了。
這個案例的錯誤原因是我嘗試除以0,當代碼運行到地3行時,就會彈出上述錯誤提示信息,除以0( division by zero )
在運行的時候出錯,可以讓我們知道錯在哪,從而去調試。
1111111111111111111111111111111111111111111111111111111111
這裏的基本解決錯誤的步驟是:
先看行號(例如:line 3)
然後找到出錯的地方(例如:prrint(x/y))
注:當你處理運行時錯誤,錯誤就在你代碼中【而不是你使用的框架或者運行內部出現了錯誤,不要找錯重點。。不是說沒有 只是很罕見】
補:Catching runtime errors
代碼:
x=42
y=0
print()
try:
print(x/y)
except ZeroDivisionError as e:
print('sorry,something went wrong')
else:
print('sorry really went wrong')
finally:
print('this always runs on success or failure')
print()
運行:
sorry really went wrong
this always runs on success or failure
其實 try ,except,finall不是用來找bug的,bug定義的。bug是我代碼中出錯的地方,知錯不改代碼就無法運行,像用戶輸入這種無法掌控 try except,finally就是很有用的 但是你要是知道錯誤在哪,就不用了
logic errors(邏輯錯誤)
代碼:
x=206
y=42
if x<y:
print(str(x)+'is greater than '+str(y))
運行如下:
PS F:\workplace-vsc\one> & D:/Anaconda3/envs/paddle_env/python.exe f:/workplace-vsc/one/new.py
PS F:\workplace-vsc\one>
運行結果爲空
如果在後面加一句
else:
print(str(y)+' is greater than '+str(x))
加一句之後的娙結果:
PS F:\workplace-vsc\one> & D:/Anaconda3/envs/paddle_env/python.exe f:/workplace-vsc/one/new.py
42 is greater than 206
可以知道,是布爾值邏輯出現了錯誤
就先說到這裏吧。