国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

淺談Python traceback的優雅處理

2020-02-15 22:52:14
字體:
來源:轉載
供稿:網友

剛接觸Python的時候,簡單的異常處理已經可以幫助我們解決大多數問題,但是隨著逐漸地深入,我們會發現有很多情況下簡單的異常處理已經無法解決問題了,如下代碼,單純的打印異常所能提供的信息會非常有限。

def func1():  raise Exception("--func1 exception--")def main():  try:    func1()  except Exception as e:    print eif __name__ == '__main__':  main()

執行后輸出如下:

--func1 exception--

通過示例,我們發現普通的打印異常只有很少量的信息(通常是異常的value值),這種情況下我們很難定位在哪塊代碼出的問題,以及如何出現這種異常。那么到底要如何打印更加詳細的信息呢?下面我們就來一一介紹。

sys.exc_info和traceback object

Python程序的traceback信息均來源于一個叫做traceback object的對象,而這個traceback object通常是通過函數sys.exc_info()來獲取的,先來看一個例子:

import sysdef func1():  raise NameError("--func1 exception--")def main():  try:    func1()  except Exception as e:    exc_type, exc_value, exc_traceback_obj = sys.exc_info()    print "exc_type: %s" % exc_type    print "exc_value: %s" % exc_value    print "exc_traceback_obj: %s" % exc_traceback_objif __name__ == '__main__':  main()

執行后輸出如下:

exc_type: <type 'exceptions.NameError'>
exc_value: --func1 exception--
exc_traceback_obj: <traceback object at 0x7faddf5d93b0>

通過以上示例我們可以看出,sys.exc_info()獲取了當前處理的exception的相關信息,并返回一個元組,元組的第一個數據是異常的類型(示例是NameError類型),第二個返回值是異常的value值,第三個就是我們要的traceback object.

有了traceback object我們就可以通過traceback module來打印和格式化traceback的相關信息,下面我們就來看下traceback module的相關函數。

traceback module

Python的traceback module提供一整套接口用于提取,格式化和打印Python程序的stack traces信息,下面我們通過例子來詳細了解下這些接口:

print_tb

import sysimport tracebackdef func1():  raise NameError("--func1 exception--")def main():  try:    func1()  except Exception as e:    exc_type, exc_value, exc_traceback_obj = sys.exc_info()    traceback.print_tb(exc_traceback_obj)if __name__ == '__main__':  main()

輸出:

File "<ipython-input-23-52bdf2c9489c>", line 11, in main
    func1()
File "<ipython-input-23-52bdf2c9489c>", line 6, in func1
    raise NameError("--func1 exception--")

這里我們可以發現打印的異常信息更加詳細了,下面我們了解下print_tb的詳細信息:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 深水埗区| 大同市| 岳普湖县| 贺州市| 南京市| 阳信县| 盖州市| 汾西县| 北票市| 中方县| 盐山县| 宁阳县| 乡宁县| 松阳县| 始兴县| 南江县| 玉溪市| 惠东县| 松原市| 收藏| 天柱县| 茶陵县| 谷城县| 双城市| 花莲市| 长垣县| 阿坝| 新余市| 宜章县| 荣昌县| 屏边| 金平| 宜宾市| 旺苍县| 湖州市| 长治市| 阳东县| 裕民县| 进贤县| 原平市| 营口市|