python中的捕获异常、异常跟踪
捕獲異常,打印異常信息
try: 1/0 except Exception as e: print(e)輸出結(jié)果是integer division or modulo by zero,只知道是報(bào)了這個(gè)錯(cuò),但是卻不知道在哪個(gè)文件哪個(gè)函數(shù)哪一行報(bào)的錯(cuò)。下面使用traceback模塊:
traceback跟蹤異常
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' import tracebacktry: 1/0 except Exception as e: traceback.print_exc()輸出的結(jié)果是:
Traceback (most recent call last):File "/Users/zhouwanghua/Code/dot/__init__.py", line 7, in <module>1 / 0ZeroDivisionError: division by zero這時(shí),就更明確了
traceback.print_exc()跟traceback.format_exc()區(qū)別:
- format_exc()返回字符串
- print_exc()則直接給打印出來
cgitb
如果平時(shí)開發(fā)喜歡基于log的方式來調(diào)試,那么可能經(jīng)常去做這樣的事情,在log里面發(fā)現(xiàn)異常之后,因?yàn)樾畔⒉蛔?#xff0c;那么會(huì)再去額外加一些debug log來把相關(guān)變量的值輸出。
調(diào)試完畢之后再把這些debug log去掉。其實(shí)沒必要這么麻煩,Python庫中提供了cgitb模塊來幫助做這些事情,它能夠輸出異常上下文所有相關(guān)變量的信息,不必每次自己再去手動(dòng)加debug log
如下代碼片段:
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' def func(a, b):return a / b if __name__ == '__main__':import cgitbcgitb.enable(format='text')import sysimport tracebackfunc(1, 0運(yùn)行之后就會(huì)得到詳細(xì)的數(shù)據(jù):
A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred./Users/samchi/Documents/workspace/tracebacktest/teststacktrace.py in <module>()4 import cgitb5 cgitb.enable(format='text')6 import sys7 import traceback8 func(1, 0) func = <function func>/Users/samchi/Documents/workspace/tracebacktest/teststacktrace.py in func(a=1, b=0)2 return a / b3 if __name__ == '__main__':4 import cgitb5 cgitb.enable(format='text')6 import sys a = 1 b = 0logging
在Python中如果直接傳遞異常對(duì)象給log.error,那么只會(huì)在log里面出現(xiàn)一行異常對(duì)象的值. 在Python中正確的記錄Log方式應(yīng)該是這樣的:
logging.exception(ex)logging.error(ex, exc_info=1) # 指名輸出棧蹤跡, logging.exception的內(nèi)部也是包了一層此做法logging.critical(ex, exc_info=1) # 更加嚴(yán)重的錯(cuò)誤級(jí)別總結(jié)
以上是生活随笔為你收集整理的python中的捕获异常、异常跟踪的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python限定方法参数类型、返回值类型
- 下一篇: python 设置默认字典