1.常見bug類型
bug就是程序運行中出現(xiàn)的錯誤。
一般常見的bug類型有兩類,一類是語法錯誤,這類錯誤比較好解決,程序會直接報紅,然后我們在對應報紅的位置查找問題即可;第二類是思路錯誤,這類錯誤就不是很好解決了,因為程序不會直接報錯,只是運行的結(jié)果達不到我們的預期,這時候就需要一些調(diào)試技巧。但兩種錯誤的本質(zhì),都是對基礎知識掌握不牢固所導致的。
2.Python的異常處理機制
在一些情況下,即使程序出錯了,我們也不希望它直接終止,而是捕獲對應出錯位置的異常信息,給出提示,而不影響后續(xù)代碼的正常運行。這就是異常處理機制。先來看一段代碼:
a = int(input('請輸入第一個整數(shù):'))
b = int(input('請輸入第二個整數(shù):'))
result = a / b
print('結(jié)果為:', result)
當我們輸入10除0時,程序會直接報錯并終止:
當我們不小心手抖,輸進去字符串時:
上述兩種情況都會直接報錯,第一個異常是ZeroDivisionError
,第二個異常是ValueError
?,F(xiàn)在我們不想讓程序直接終止,使用異常捕獲機制:
try:
a = int(input('請輸入第一個整數(shù):'))
b = int(input('請輸入第二個整數(shù):'))
result = a / b
print('結(jié)果為:', result)
except ZeroDivisionError: # 捕獲0不能做除數(shù)的異常
print('對不起,除數(shù)不允許為0')
except ValueError: # 捕獲輸入字符的情況
print('不能將字符串轉(zhuǎn)化為數(shù)字')
except BaseException as e: # 捕獲所有異常
print('出錯了', e)
print('程序結(jié)束')
大家可以嘗試一下執(zhí)行上述代碼,發(fā)現(xiàn)程序在遇到異常時不會直接終止了,而是先捕獲異常信息,接著向下走。except
也是遵從順序結(jié)構(gòu),從上向下走的,先判斷是不是ZeroDivisionError
異常,再看是不是ValueError
異常。BaseException
是捕獲所有異常,一般情況下僅寫這一個except
語句足以。
2.1try-except-else結(jié)構(gòu)
try:
a = int(input('請輸入第一個整數(shù)'))
b = int(input('請輸入第二個整數(shù)'))
result = a / b
except BaseException as e:
print('出錯了', e)
else:
print('計算結(jié)果為:', result)
如果出錯了,就走except
語句;如果沒出錯,就走else
語句。
2.2try-except-else-finally結(jié)構(gòu)
try:
a = int(input('請輸入第一個整數(shù)'))
b = int(input('請輸入第二個整數(shù)'))
result = a / b
except BaseException as e:
print('出錯了',e)
else:
print('計算結(jié)果為:',result)
finally:
print('謝謝您的使用')
finally
是無論程序是否出錯都一定會執(zhí)行的語句,常用來釋放try
塊中申請的資源。
2.3Python中常見的異常類型
異常 | 描述 |
---|---|
ZeroDivisionError | 除(或取模)零(所有數(shù)據(jù)類型) |
IndexError | 序列中沒有此索引(index) |
KeyError | 映射中沒有這個鍵 |
NameError | 未聲明/未初始化對象(沒有屬性) |
SyntaxError | Python語法錯誤 |
ValueError | 傳入無效的參數(shù) |
print(10/0) # ZeroDivisionError
lst=[11,22,33,44]
print(lst[4]) # IndexError 索引從0開始
dic={'name':'張三','age':20}
print(dic['gender']) # KeyError
print(num) # NameError
int a=20 # SyntaxError
a=int('hello') # ValueError
3.traceback模塊
我們在執(zhí)行print(10/0)
這段代碼時,會報這樣的錯誤:
這其實也是traceback
模塊的功能。
這一點我們還沒學,先照著敲。
import traceback # 導入模塊
try:
print('---------------------')
print(1 / 0)
except:
traceback.print_exc()
執(zhí)行這段代碼時,發(fā)現(xiàn)橫線的位置每回執(zhí)行時可能都會變,這一塊的知識將在后續(xù)線程的學習中學到。
我們?yōu)槭裁葱枰@個模塊?因為這些異常的細節(jié)有時候要被記錄,存儲到我們的日志文件中。我們會使用這個模塊來進行異常的存儲。
4.pycharm調(diào)試
文章來源:http://www.zghlxwxcb.cn/news/detail-816059.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-816059.html
到了這里,關(guān)于Python急速入門——(第十章:bug和調(diào)試)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!