中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

當前位置: 首頁 / 技術干貨 / 正文
好程序員Python培訓分享Traceback具體使用方法

2020-10-28

Python培訓

  好程序員Python培訓分享Traceback具體使用方法詳解,首先在之前做Java的時候,異常對象默認就包含stacktrace相關的信息,通過異常對象的相關方法printStackTrace()getStackTrace()等方法就可以取到異常棧信息,能打印到log輔助調試或者做一些別的事情。但是到了Python,在2.x中,異常對象可以是任何對象,經常看到很多代碼是直接raise一個字符串出來,因此就不能像Java那樣方便的獲取異常棧了,因為異常對象和異常棧是分開的。而多數Python語言的書籍上重點在于描述Python中如何構造異常對象和raisetryexceptfinally這些的使用,對調試程序起關鍵作用的stacktrace往往基本上不怎么涉及。

Python2

  python中用于處理異常棧的模塊是traceback模塊,它提供了print_exceptionformat_exception等輸出異常棧等常用的工具函數。

 

def func(a, b):

 return a / b

if __name__ == '__main__':

 import sys

 import traceback

 try:

 func(1, 0)

 except Exception as e:

 print "print exc"

 traceback.print_exc(file=sys.stdout)

 

輸出結果:

 

print exc

Traceback (most recent call last):

  File "./teststacktrace.py", line 7, in <module>

    func(1, 0)

  File "./teststacktrace.py", line 2, in func

    return a / b

 

其實traceback.print_exc()函數只是traceback.print_exception()函數的一個簡寫形式,而它們獲取異常相關的數據都是通過sys.exc_info()函數得到的。

 

def func(a, b):

 return a / b

if __name__ == '__main__':

 import sys

 import traceback

 try:

 func(1, 0)

 except Exception as e:

 print "print_exception()"

 exc_type, exc_value, exc_tb = sys.exc_info()

 print 'the exc type is:', exc_type

 print 'the exc value is:', exc_value

 print 'the exc tb is:', exc_tb

 traceback.print_exception(exc_type, exc_value, exc_tb)

 

 

 

輸出結果:

 

print_exception()

the exc type is: <type 'exceptions.ZeroDivisionError'>

the exc value is: integer division or modulo by zero

the exc tb is: <traceback object at 0x104e7d4d0>

Traceback (most recent call last):

  File "./teststacktrace.py", line 7, in <module>

    func(1, 0)

  File "./teststacktrace.py", line 2, in func

    return a / b

ZeroDivisionError: integer division or modulo by zero

 

sys.exc_info()返回的值是一個元組,其中diyi個元素,exc_type是異常的對象類型,exc_value是異常的值,exc_tb是一個traceback對象,對象中包含出錯的行數、位置等數據。然后通過print_exception函數對這些異常數據進行整理輸出。

 

traceback模塊提供了extract_tb函數來更加詳細的解釋traceback對象所包含的數據:

 

def func(a, b):

 return a / b

if __name__ == '__main__':

 import sys

 import traceback

 try:

 func(1, 0)

 except:

 _, _, exc_tb = sys.exc_info()

 for filename, linenum, funcname, source in traceback.extract_tb(exc_tb):

  print "%-23s:%s '%s' in %s()" % (filename, linenum, source, funcname)

 

輸出結果:

 

samchimac:tracebacktest samchi$ python ./teststacktrace.py

./teststacktrace.py    :7 'func(1, 0)' in <module>()

./teststacktrace.py    :2 'return a / b' in func()

 

使用cgitb來簡化異常調試

 

如果平時開發喜歡基于log的方式來調試,那么可能經常去做這樣的事情,在log里面發現異常之后,因為信息不足,那么會再去額外加一些debuglog來把相關變量的值輸出。調試完畢之后再把這些debuglog去掉。其實沒必要這么麻煩,Python庫中提供了cgitb模塊來幫助做這些事情,它能夠輸出異常上下文所有相關變量的信息,不必每次自己再去手動加debuglog

 

cgitb的使用簡單的不能想象:

 

def func(a, b):

    return a / b

if __name__ == '__main__':

    import cgitb

    cgitb.enable(format='text')

    import sys

    import traceback

    func(1, 0)

 

運行之后就會得到詳細的數據:

 

A problem occurred in a Python script.  Here is the sequence of

function calls leading up to the error, in the order they occurred.

 

 /Users/samchi/Documents/workspace/tracebacktest/teststacktrace.py in <module>()

    4  import cgitb

    5  cgitb.enable(format='text')

    6  import sys

    7  import traceback

    8  func(1, 0)

func = <function func>

 

 /Users/samchi/Documents/workspace/tracebacktest/teststacktrace.py in func(a=1, b=0)

    2  return a / b

    3 if __name__ == '__main__':

    4  import cgitb

    5  cgitb.enable(format='text')

    6  import sys

a = 1

b = 0

 

完全不必再去log.debug("a=%d"%a)了,個人感覺cgitb在線上環境不適合使用,適合在開發的過程中進行調試,非常的方便。

 

也許你會問,cgitb為什么會這么屌?能獲取這么詳細的出錯信息?其實它的工作原理同它的使用方式一樣的簡單,它只是覆蓋了默認的sys.excepthook函數,sys.excepthook是一個默認的全局異常攔截器,可以嘗試去自行對它修改:

 

def func(a, b):

    return a / b

def my_exception_handler(exc_type, exc_value, exc_tb):

    print "i caught the exception:", exc_type

    while exc_tb:

        print "the line no:", exc_tb.tb_lineno

        print "the frame locals:", exc_tb.tb_frame.f_locals

        exc_tb = exc_tb.tb_next

  

if __name__ == '__main__':

    import sys

    sys.excepthook = my_exception_handler

    import traceback

    func(1, 0)

 

輸出結果:

 

i caught the exception: <type 'exceptions.ZeroDivisionError'>

the line no: 14

the frame locals: {'my_exception_handler': <function my_exception_handler at 0x100e04aa0>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': './teststacktrace.py', 'traceback': <module 'traceback' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/traceback.pyc'>, '__package__': None, 'sys': <module 'sys' (built-in)>, 'func': <function func at 0x100e04320>, '__name__': '__main__', '__doc__': None}

the line no: 2

the frame locals: {'a': 1, 'b': 0}

 

只是從stackframe對象中獲取的相關變量的值。frame對象中還有很多神奇的屬性,就不一一探索了。

 

使用logging模塊來記錄異常

 

在使用Java的時候,用log4j記錄異常很簡單,只要把Exception對象傳遞給log.error方法就可以了,但是在Python中就不行了,如果直接傳遞異常對象給log.error,那么只會在log里面出現一行異常對象的值。

 

Python中正確的記錄Log方式應該是這樣的:

 

logging.exception(ex)

logging.error(ex, exc_info=1) # 指名輸出棧蹤跡, logging.exception的內部也是包了一層此做法

logging.critical(ex, exc_info=1) # 更加嚴重的錯誤級別

 

  以上就是關于好程序員Python培訓Traceback具體使用方法的全部內容,希望對大家的學習有所幫助,最后想要了解更多關于Python和人工智能方面內容的小伙伴,請關注好程序員Python培訓官網、微信公眾號等平臺。

Python培訓:http://www.jf300529.com/python_class.shtml

好程序員公眾號

  • · 剖析行業發展趨勢
  • · 匯聚企業項目源碼

好程序員開班動態

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數據+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發 <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數據分析 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓IT培訓
在線咨詢
IT培訓IT培訓
試聽
IT培訓IT培訓
入學教程
IT培訓IT培訓
立即報名
IT培訓

Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號

中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

            国产剧情一区二区| 精品国产乱码91久久久久久网站| 久久综合久久综合亚洲| 午夜精彩视频在线观看不卡| 色婷婷亚洲综合| 中文字幕永久在线不卡| 国产传媒久久文化传媒| 欧美一级二级在线观看| 日韩av一区二| 欧美一三区三区四区免费在线看| 亚洲高清在线精品| 色婷婷精品大在线视频 | 99精品视频在线免费观看| 久久日一线二线三线suv| 久久99日本精品| 欧美sm美女调教| 国产一区福利在线| 久久精品视频在线免费观看| 国产iv一区二区三区| 国产精品网站在线| 成人少妇影院yyyy| 亚洲色图制服诱惑 | 国产嫩草影院久久久久| 高清在线不卡av| 中文字幕一区二区三区在线播放 | 国产激情一区二区三区四区| 国产校园另类小说区| hitomi一区二区三区精品| 综合av第一页| 欧美精品乱码久久久久久按摩| 日韩国产精品大片| 久久欧美中文字幕| 99re成人在线| 亚洲国产精品影院| 欧美xxxxxxxx| 99久久777色| 视频在线观看91| 1024亚洲合集| 制服丝袜成人动漫| 国产精品主播直播| 亚洲男女一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | 成人ar影院免费观看视频| 有坂深雪av一区二区精品| 制服丝袜亚洲精品中文字幕| 国产酒店精品激情| 亚洲曰韩产成在线| 精品国精品国产| 色嗨嗨av一区二区三区| 裸体健美xxxx欧美裸体表演| 国产精品久久久久久久蜜臀 | 夜夜嗨av一区二区三区中文字幕 | 欧美成人bangbros| 91在线观看一区二区| 男女性色大片免费观看一区二区 | 大桥未久av一区二区三区中文| 一区二区三区丝袜| 精品国一区二区三区| 99视频一区二区三区| 美女诱惑一区二区| 一区二区国产视频| 国产欧美日韩精品在线| 欧美日韩不卡一区| 99久久精品免费精品国产| 麻豆精品新av中文字幕| 亚洲精品久久久蜜桃| 久久午夜老司机| 欧美一区二区三区在线看| 一本久道中文字幕精品亚洲嫩| 欧洲精品一区二区三区在线观看| 激情综合色播五月| 午夜精品久久久久久久99水蜜桃| 国产精品色哟哟| 26uuu精品一区二区三区四区在线| 在线观看视频一区| 国产成人丝袜美腿| 久久99热国产| 奇米色777欧美一区二区| 亚洲国产另类av| 一区二区三区精品久久久| 国产精品久久久久婷婷| 国产欧美日韩亚州综合| 精品国产精品一区二区夜夜嗨| 欧美老肥妇做.爰bbww视频| 欧美亚洲日本国产| 欧美在线free| 欧美色国产精品| 欧美视频中文字幕| 欧美视频在线观看一区二区| 色激情天天射综合网| 91片在线免费观看| 色999日韩国产欧美一区二区| 成人听书哪个软件好| 国产mv日韩mv欧美| 成人av高清在线| 99精品偷自拍| 色伊人久久综合中文字幕| 一本大道久久精品懂色aⅴ| 99久久综合精品| 99久久综合色| 欧美综合视频在线观看| 精品视频999| 91精品国产综合久久久久久漫画| 91精品一区二区三区久久久久久| 91精品一区二区三区在线观看| 91精品国产乱| 久久久久久久久久久久久夜| 国产女人aaa级久久久级| 国产精品白丝在线| 亚洲精品久久7777| 亚洲永久免费av| 青青青爽久久午夜综合久久午夜| 裸体健美xxxx欧美裸体表演| 国产高清不卡一区| 91毛片在线观看| 欧美日产在线观看| 精品久久人人做人人爰| 国产日韩亚洲欧美综合| 一区免费观看视频| 日韩综合在线视频| 韩国精品主播一区二区在线观看 | 8x福利精品第一导航| 精品欧美黑人一区二区三区| 国产精品婷婷午夜在线观看| 亚洲乱码国产乱码精品精可以看| 日韩精品高清不卡| 成人综合婷婷国产精品久久蜜臀| 一本大道综合伊人精品热热| 日韩一本二本av| 国产精品二三区| 奇米影视一区二区三区| 岛国精品在线播放| 制服视频三区第一页精品| 国产欧美精品一区| 午夜电影一区二区三区| 国产麻豆精品在线| 久久亚洲免费视频| 亚洲福利视频导航| 成人性生交大片免费看视频在线| 日本久久一区二区三区| wwwwww.欧美系列| 亚洲线精品一区二区三区| 国产一区二区三区四区在线观看| 色久优优欧美色久优优| 久久久九九九九| 日韩二区三区在线观看| 91在线观看一区二区| 欧美第一区第二区| 亚洲第一精品在线| 99精品久久99久久久久| 亚洲精品一区二区三区在线观看| 亚洲卡通动漫在线| 懂色av一区二区三区免费观看| 3d成人动漫网站| 一区二区成人在线| 成人高清免费观看| 久久一夜天堂av一区二区三区| 亚洲不卡一区二区三区| 波多野结衣精品在线| 久久综合狠狠综合久久综合88| 亚州成人在线电影| 欧美在线视频不卡| 亚洲欧美激情插 | 欧美一区二区三区在线电影| 亚洲综合男人的天堂| 91麻豆国产精品久久| 国产精品二区一区二区aⅴ污介绍| 韩国女主播成人在线| 欧美一区二区三区在线| 五月婷婷综合激情| 欧美日韩一级大片网址| 一区二区三区精品视频| 91小视频在线| 亚洲欧美日韩一区| 99精品视频在线播放观看| 中文字幕av资源一区| 高清av一区二区| 国产精品三级电影| 99久久综合色| ㊣最新国产の精品bt伙计久久| 成人福利视频网站| 成人免费一区二区三区视频 | 国产一区二区三区| 国产亚洲短视频| 成人av小说网| 一区二区三区在线观看欧美| 日本久久一区二区| 亚洲1区2区3区4区| 91精品国产综合久久婷婷香蕉| 丝袜诱惑亚洲看片| 欧美mv日韩mv国产网站| 国产一区二区成人久久免费影院| 日韩三级在线免费观看| 狠狠色丁香婷综合久久| 日本一区二区三区国色天香| 99久久国产综合色|国产精品| 亚洲欧美色一区| 在线不卡中文字幕播放| 国产在线视频精品一区| 国产精品美女久久久久久|