python筆記71 - traceback.print_exc()保存異常內容


前言

python運行代碼出現異常后,會在控制台輸出報錯內容,那么如何把報錯的完整內容保存到日志文件中呢?

try...expect捕獲異常

當運行下面的代碼

a = ["hello", "yoyo"]
print(a[4])

在控制台會輸出異常

Traceback (most recent call last):
  File "D:/demo/aa.py", line 4, in <module>
    print(a[4])
IndexError: list index out of range

可以通過try...expect捕獲異常

a = ["hello", "yoyo"]
try:
    print(a[4])
except Exception as e:
    print("異常類:{}".format(e.__class__.__name__))
    print("異常描述: {}".format(e))

運行后輸出

異常類:IndexError
異常描述: list index out of range

這樣雖然能捕獲到異常的類和具體描述,但是沒前面的詳細,我們希望能捕獲完整的Traceback內容

traceback模塊

traceback模塊被用來跟蹤異常返回信息

import traceback

a = ["hello", "yoyo"]
try:
    print(a[4])
except Exception as e:
    traceback.print_exc()

日志保存到文本

import traceback

a = ["hello", "yoyo"]
try:
    print(a[4])
except Exception as e:
    fp = open('log.txt', 'a')
    traceback.print_exc(file=fp)
    fp.close()

於是在控制台就看不到異常的輸出了,異常的內容會輸出到log.txt文件

StringIO 寫入內存

如果不想寫入到文件,也可以暫時寫入到內存(StringIO),后面需要用到的時候再讀出來

from io import StringIO
import traceback

a = ["hello", "yoyo"]

fp = StringIO()
try:
    print(a[4])
except Exception as e:
    traceback.print_exc(file=fp)

print("----后續代碼用到地方讀出來----")
print(fp.getvalue())

運行結果

----后續代碼用到地方讀出來----
Traceback (most recent call last):
  File "D:/demo/myweb/aa.py", line 8, in <module>
    print(a[4])
IndexError: list index out of range


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM