Python中捕捉詳細異常資訊的程式碼範例

來源:互聯網
上載者:User
大家在開發的過程中可能時常碰到一個需求,需要把Python的異常資訊輸出到記錄檔中。
網上的辦法都不太實用,下面介紹一種實用的,從Python 2.7源碼中扣出來的。
廢話不說 直接上代碼,代碼不多,注釋比較多而已。

import sys, tracebacktraceback_template = '''Traceback (most recent call last): File "%(filename)s", line %(lineno)s, in %(name)s%(type)s: %(message)s\n''' # Skipping the "actual line" item# Also note: we don't walk all the way through the frame stack in this example# see hg.python.org/cpython/file/8dffb76faacc/Lib/traceback.py#l280# (Imagine if the 1/0, below, were replaced by a call to test() which did 1/0.)try:  1/0except:  # http://docs.python.org/2/library/sys.html#sys.exc_info  exc_type, exc_value, exc_traceback = sys.exc_info() # most recent (if any) by default  '''  Reason this _can_ be bad: If an (unhandled) exception happens AFTER this,  or if we do not delete the labels on (not much) older versions of Py, the  reference we created can linger.  traceback.format_exc/print_exc do this very thing, BUT note this creates a  temp scope within the function.  '''  traceback_details = {             'filename': exc_traceback.tb_frame.f_code.co_filename,             'lineno' : exc_traceback.tb_lineno,             'name'  : exc_traceback.tb_frame.f_code.co_name,             'type'  : exc_type.__name__,             'message' : exc_value.message, # or see traceback._some_str()            }  del(exc_type, exc_value, exc_traceback) # So we don't leave our local labels/objects dangling  # This still isn't "completely safe", though!  # "Best (recommended) practice: replace all exc_type, exc_value, exc_traceback  # with sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]  ## 修改這裡就可以把traceback打到任意地方,或者儲存到檔案中了  print traceback_template % traceback_details
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.