Python報錯怎麼調試?

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

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

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

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-

  3. score = int(input('輸入分數:\\n'))
  4. if score >= 90:
  5. grade = 'A'
  6. elif score >= 60:
  7. grade = 'B'
  8. else:
  9. grade = 'C'

  10. print('%d 屬於 %s' % (score,grade))

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

  1. ➜ lezhi.io python3 score.py
  2. 輸入分數:
  3. 100
  4. 100 屬於 A

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

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

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

  1. 一般報錯的最下面是報錯的主要錯誤類型:ValueError也就是值類型錯誤,官方文檔是這樣定義的:當操作或函數接收到具有正確類型但值不適合的參數,並且情況不能用更精確的異常例如IndexError來描述時將被引發
  2. 然後後面是具體的描述,是幫我們定位具體原因的關鍵,上面的意思是:”當使用int()來做類型轉換時發生錯誤”,很明顯, “adjfkd”不能直接轉換成數字。
  3. 再接著向上看, 會顯示報錯的代碼和行數
  4. 根據此,我們知道了問題所在,就可以著手做修復工作,以下為修復示例:
  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. import sys

  4. try:
  5. score = int(input('輸入分數:\\n'))
  6. except ValueError as ex:
  7. print("請輸入一個有效的數字")
  8. sys.exit(-1)
  9. if score >= 90:
  10. grade = 'A'
  11. elif score >= 60:
  12. grade = 'B'
  13. else:
  14. grade = 'C'

  15. print('%d 屬於 %s' % (score,grade))





分享到:


相關文章: