使用Python將Exception異常錯誤堆棧信息寫入日志文件
假設(shè)需要把發(fā)生異常錯誤的信息寫入到log.txt日志文件中去:
import traceback import logging logging.basicConfig(filename='log.txt', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') try: raise Exception('發(fā)生異常錯誤信息') except: #方案一,自己定義一個文件,自己把錯誤堆棧信息寫入文件。 #errorFile = open('log.txt', 'a') #errorFile.write(traceback.format_exc()) #errorFile.close() #方案二,使用Python標準日志管理維護工具。 logging.debug(traceback.format_exc())
補充知識:Python---異常處理、調(diào)用棧、異常記錄、拋出錯誤
異常處理:
在python中,內(nèi)置了一套錯誤處理機制:try:...except:...finally
語法:
try:
可能出現(xiàn)異常語句
except 錯誤類型1 as e:
異常處理
except 錯誤類型2 as e:
異常處理2
...
finally:
無論是否出錯,都會執(zhí)行的語句
PS:python的錯誤也是類,所有錯誤的類都繼承自BaseException。
所以使用except時需注意,不但會捕獲該類型的錯誤,還會將其子類錯誤一網(wǎng)打盡
調(diào)用棧:
若異常沒有被捕獲,則會一直往上拋,最后拋給解釋器,解釋器打印錯誤的堆棧信息,然后退出。
因此,查找錯誤的時候:
1、先看錯誤類型
2、從下往上找
如:
異常記錄:
如果只使用異常捕獲,結(jié)果只會打印錯誤類型,不會打印錯誤堆棧信息。如果不使用異常捕獲,python解釋器會打印錯誤類型及錯誤堆棧信息,但是程序也被結(jié)束了。使用異常記錄就可以把錯誤類型和錯誤堆棧信息都打印出來,而且程序可以繼續(xù)執(zhí)行。
import logging def foo(s): return 10/int(s) def bar(s) return foo(s)*2 def mian(): try: bar('0') except Exception as e: logging.exception(e) main() print("END")
拋出錯誤:
因為錯誤是class,捕獲一個錯誤就是捕獲到該class的一個實例,因此,錯誤并不是憑空產(chǎn)生的,而是有意創(chuàng)建并拋出的,pyhton的內(nèi)置函數(shù)會拋出很多類型的錯誤,我們自己編寫的函數(shù)也可以拋出錯誤。
如果要拋出錯誤,首先根據(jù)需要,可以定義一個錯誤的class,選擇好繼承關(guān)系,然后,用raise語句拋出一個錯誤的實例。
class FooError(valueError): pass def foo(s): n = int(s) if n == 0: raise FooError("invalid value :%s"%s) return 10/n foo('0')
PS:只有在必要的時候才定義我們自己的錯誤類型,如果可以選擇python已有的內(nèi)置的錯誤類型,盡量使用python內(nèi)置的錯誤類型。
常見的錯誤類型
- AttributeError 試圖訪問一個對象沒有的屬性
- IOError 輸入/輸出異常 無法打開文件
- IndentationError 語法錯誤,代碼沒有對齊
- keyError 訪問的key字典中不存在
- NameError 使用一個還未賦值的對象的變量
- TypeError 傳入對象類型與要求不合法
- ValueError 傳入一個調(diào)用者不期望的值
以上這篇使用Python將Exception異常錯誤堆棧信息寫入日志文件就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
pymongo如何通過oplog獲取數(shù)據(jù)(mongodb)
使用MongoDB的oplog(操作日志)進行數(shù)據(jù)同步是高級的用法,主要用于復(fù)制和故障恢復(fù),這篇文章主要介紹了pymongo通過oplog獲取數(shù)據(jù)(mongodb),需要的朋友可以參考下2023-09-09python中openpyxl和xlsxwriter對Excel的操作方法
這篇文章主要介紹了python中openpyxl和xlsxwriter對Excel的操作方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03python paramiko實現(xiàn)ssh遠程訪問的方法
這篇文章主要介紹了python paramiko模塊實現(xiàn)ssh遠程訪問的方法,大家參考使用2013-12-12python數(shù)據(jù)分析之如何刪除value=0的行
這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)分析之如何刪除value=0的行的相關(guān)資料,文中通過實例代碼以及圖文介紹的非常詳細,對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-12-12詳解Python之Scrapy爬蟲教程NBA球員數(shù)據(jù)存放到Mysql數(shù)據(jù)庫
這篇文章主要介紹了詳解Python之Scrapy爬蟲教程NBA球員數(shù)據(jù)存放到Mysql數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01