前言
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