Python報錯怎麼調試?

Python的學習調試之路一般是這樣的:

新手:把報錯內容貼在QQ技術群或者貼吧裡向技術大佬求助初入門:瞭解了Python的常見的報錯異常分類:如ValueError、SyntaxError、IntentError等,並會根據這些異常,在代碼中添加print()方法來搞明白報錯原因中級開發人員:不僅瞭解上面的各種異常Error和Exception,還能根據報錯堆棧準備定位報錯位置及原因高級開發人員:除了可以解決以上常見的問題,還會利用IDE本身的調試工具或者Python的pdb來排查疑難雜症。

實例分析如何做程序調試:

#!/usr/bin/python# -*- coding: UTF-8 -*-
score = int(input('輸入分數:\\n'))if score >= 90:grade = 'A'elif score >= 60:grade = 'B'else:grade = 'C'
print('%d 屬於 %s' % (score,grade))

上面的程序,如果輸入的是數字是沒有問題的,比如:

➜ lezhi.io python3 score.py輸入分數:100100 屬於 A

假如我們隨便輸入一些字符呢?

➜ lezhi.io python3 score.py輸入分數:adjfkdTraceback (most recent call last):File "score.py", line 4, in <module>score = int(input('輸入分數:\\n'))ValueError: invalid literal for int() with base 10: 'adjfkd'

初學Python的人可能覺得無從下手,只得把報錯貼在網上尋求幫忙。 下面我說下這種情況下的辦法:

一般報錯的最下面是報錯的主要錯誤類型:ValueError也就是值類型錯誤,官方文檔是這樣定義的:當操作或函數接收到具有正確類型但值不適合的參數,並且情況不能用更精確的異常例如IndexError來描述時將被引發然後後面是具體的描述,是幫我們定位具體原因的關鍵,上面的意思是:”當使用int()來做類型轉換時發生錯誤”,很明顯, “adjfkd”不能直接轉換成數字。再接著向上看, 會顯示報錯的代碼和行數根據此,我們知道了問題所在,就可以著手做修復工作,以下為修復示例:#!/usr/bin/python# -*- coding: UTF-8 -*-import sys
try:score = int(input('輸入分數:\\n'))except ValueError as ex:print("請輸入一個有效的數字")sys.exit(-1)if score >= 90:grade = 'A'elif score >= 60:grade = 'B'else:grade = 'C'
print('%d 屬於 %s' % (score,grade))