python traceback使用 異常的獲取與處理

1、traceback.print_exc()
2、traceback.format_exc()
3、traceback.print_exception()

簡單說下這三個方法是做什么用的:

1、print_exc():是對異常棧輸出
2、format_exc():是把異常棧以字符串的形式返回,print(traceback.format_exc()) 就相當于traceback.print_exc()
3、print_exception():traceback.print_exc()實現(xiàn)方式就是traceback.print_exception(sys.exc_info()),可以點sys.exc_info()進去看看實現(xiàn)

測試代碼如下:

def func(a, b):
    return a / b


if __name__ == '__main__':
    import sys
    import time
    import traceback

    try:
        func(1, 0)
    except Exception as e:
        print('***', type(e), e, '***')
        time.sleep(2)

        print("***traceback.print_exc():*** ")
        time.sleep(1)
        traceback.print_exc()
        time.sleep(2)

        print("***traceback.format_exc():*** ")
        time.sleep(1)
        print(traceback.format_exc())
        time.sleep(2)

        print("***traceback.print_exception():*** ")
        time.sleep(1)
        traceback.print_exception(*sys.exc_info())

運行結果:

*** <class 'ZeroDivisionError'> division by zero ***


***traceback.print_exc():*** 
Traceback (most recent call last):
  File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 42, in <module>
    func(1, 0)
  File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 33, in func
    return a / b
ZeroDivisionError: division by zero


***traceback.format_exc():*** 
Traceback (most recent call last):
  File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 42, in <module>
    func(1, 0)
  File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 33, in func
    return a / b
ZeroDivisionError: division by zero


***traceback.print_exception():*** 
Traceback (most recent call last):
  File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 42, in <module>
    func(1, 0)
  File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 33, in func
    return a / b
ZeroDivisionError: division by zero

可以看出,三種方式打印結果是一樣的。在開發(fā)時,做調(diào)試是很方便的。也可以把這種異常棧寫入日志。

logging.exception(ex)

# 指名輸出棧蹤跡, logging.exception的內(nèi)部也是包了一層此做法
logging.error(ex, exc_info=1) 

# 更加嚴重的錯誤級別 
logging.critical(ex, exc_info=1) 

# 我直接copy的,未嘗試。有時間會試下的

python 還有一個模塊叫cgitb,輸出的error非常詳情。

    try:
        func(1, 0)
    except Exception as e:
        import cgitb
        cgitb.enable(format='text')
        func(1, 0)

參考:
https://blog.csdn.net/lengxingxing_/article/details/56317838

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Python 面向對象Python從設計之初就已經(jīng)是一門面向對象的語言,正因為如此,在Python中創(chuàng)建一個類和對...
    順毛閱讀 4,359評論 4 16
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,235評論 0 38
  • 轉載自:JmilkFan_范桂颶:http://blog.csdn.net/jmilk 異常 異常即非正常狀態(tài),在...
    ccq_inori閱讀 3,823評論 0 1
  • 草沒有黃 花兒沒有謝 綠葉也還沒有與枝椏分別 但是,別離啊 來的比草忙,比花兒急,比葉子的離開更加猝不及防 想和你...
    墨言0閱讀 613評論 0 2
  • 我們之間,終成故事 希望你走的越遠就有更好的風景,希望一別兩寬,各生歡喜。 Z姑娘和先生L先生的相識像大多數(shù)平常的...
    xyz姑娘閱讀 473評論 1 0

友情鏈接更多精彩內(nèi)容