Python捕獲異常堆疊資訊的幾種方法

2021-08-28 16:45:03 字數 2068 閱讀 3623

程式出錯的時候,我們往往需要根據異常資訊來找到具體出錯的**。簡單地用print列印異常資訊並不能很好地追溯出錯的**:

# -*- coding: utf-8 -*-

def foo(a, b):

c = a + b

raise valueerror('test')

return c

def bar(a):

print('a + 100:', foo(a, 100))

def main():

try:

bar(100)

except exception as e:

print(repr(e))

if __name__ == '__main__':

main()

輸出:

valueerror('test',)
列印的異常資訊不夠詳細,對錯誤追蹤沒有多大幫助。這時候異常堆疊資訊就派上用場了。下面簡單介紹幾種列印異常堆疊資訊的方法。

1.最簡單的方法之一就是使用logging.exception

# -*- coding: utf-8 -*-

import logging

def foo(a, b):

c = a + b

raise valueerror('test')

return c

def bar(a):

print('a + 100:', foo(a, 100))

def main():

try:

bar(100)

except exception as e:

logging.exception(e)

if __name__ == '__main__':

main()

輸出:

error:root:test

traceback (most recent call last):

file "e:/git_work/scrapy_ppt/test.py", line 16, in main

bar(100)

file "e:/git_work/scrapy_ppt/test.py", line 11, in bar

print('a + 100:', foo(a, 100))

file "e:/git_work/scrapy_ppt/test.py", line 6, in foo

raise valueerror('test')

valueerror: test

從異常堆疊資訊中我們可以不費力氣就找出錯誤**是哪一行。

2.其它方法:

# -*- coding: utf-8 -*-

import traceback

import sys

def foo(a, b):

c = a + b

raise valueerror('test')

return c

def bar(a):

print('a + 100:', foo(a, 100))

def main():

try:

bar(100)

except exception as e:

# 方法二

traceback.print_exc()

# 方法三

msg = traceback.format_exc()

print(msg)

et, ev, tb = sys.exc_info()

# 方法四

traceback.print_tb(tb)

# 方法五

traceback.print_exception(et, ev, tb)

# 方法六

msg = traceback.format_exception(et, ev, tb)

for m in msg:

print(m)

if __name__ == '__main__':

main()

golang 異常退出堆疊捕獲

利用golang自帶包 runtime debug 異常時列印 package main import fmt os runtime debug time func trye exename os.args 0 獲取程式名稱 now time.now 獲取當前時間 pid os.getpid 獲取程...

python異常資訊捕獲方法整理歸納

方法一 try print 1 0 except exception,con print exception,con con可以換成其它的名字 方法二 try print 1 0 except import traceback traceback.print exc 將異常資訊列印在直譯器上 以下是...

python 如何捕獲異常詳細資訊

當我們需要對異常進行捕獲來保證程式的健壯。但是debug的時候,我們可能需要異常的詳細資訊,這時可以使用sys.exc info來處理 import traceback import sys try raise valueerror this is a exp except exception as...