海上月明

          editer by sun
          posts - 162, comments - 51, trackbacks - 0, articles - 8
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          traceback 的處理

          Posted on 2008-03-07 18:01 pts 閱讀(1260) 評論(0)  編輯  收藏 所屬分類: Python

          traceback 的處理

          from::Limodou的學(xué)習(xí)記錄

          trackback在 Python 中非常有用,它可以顯示出現(xiàn)異常(Exception)時(shí)代碼執(zhí)行棧的情況。 但當(dāng)我們捕捉異常,一般是自已的出錯(cuò)處理,因此代碼執(zhí)行棧的信息就看不到了,如果還想顯 示的話,就要用到traceback模塊了。

          這里只是簡單的對traceback模塊的介紹,不是一個(gè)完整的說明,而且只是滿足我個(gè)人的要求, 更詳細(xì)的還是要看文檔。

          打印完整的traceback

          讓我們先看一個(gè)traceback的顯示:

          >>> 1/0

          Traceback (most recent call last):
          File "", line 1, in -toplevel-
          1/0
          ZeroDivisionError: integer division or modulo by zero

          可以看出 Python 缺省顯示的traceback有一個(gè)頭:第一行,出錯(cuò)詳細(xì)位置:第二、三行, 異常信息:第四行。也就是說分為三部分,而在traceback可以分別對這三部分進(jìn)行處理。 不過我更關(guān)心完整的顯示。

          在traceback中提供了print_exc([limit[, file]])函數(shù)可以打印出與上面一樣的效果。 limit參數(shù)是限定代碼執(zhí)行棧的條數(shù),file參數(shù)可以將traceback信息輸出到文件對象中。缺省的話是輸出到錯(cuò)誤輸出中。舉例:

          >>> try:
          1/0
          except:
          traceback.print_exc()

          Traceback (most recent call last):
          File "", line 2, in ?
          ZeroDivisionError: integer division or modulo by zero

          當(dāng)出現(xiàn)異常sys.exc_info()函數(shù)會(huì)返回與異常相關(guān)的信息。如:

          >>> try:
          1/0
          except:
          sys.exc_info()

          (<class exceptions.ZeroDivisionError at 0x00BF4CC0>,
          <exceptions.ZeroDivisionError instance at 0x00E29DC8>,
          <traceback object at 0x00E29DF0>)

          sys.exc_info()返回一個(gè)tuple,異常類,異常實(shí)例,和traceback。

          print_exc()是直接輸出了,如果我們想得到它的內(nèi)容,如何做?使用 format_exception(type, value, tb [,limit]),type, value, tb分別對應(yīng) sys.exc_info()對應(yīng)的三個(gè)值。如:

          >>> try:
          1/0
          except:
          type, value, tb = sys.exc_info()
          print traceback.format_exception(type, value, tb)

          ['Traceback (most recent call last):\n', ' File "", line 2, in ?\n',
          'ZeroDivisionError: integer division or modulo by zero\n']
          這樣,我們知道了format_exception返回一個(gè)字符串列表,這樣我們就可以將其應(yīng)用到我們的程序中了。
          主站蜘蛛池模板: 东安县| 连山| 定安县| 民和| 迭部县| 广元市| 开远市| 康平县| 溧水县| 内黄县| 云浮市| 衡山县| 松滋市| 随州市| 潮州市| 荆门市| 潢川县| 乡宁县| 阿拉善盟| 湖北省| 新乡市| 新竹市| 清新县| 射阳县| 裕民县| 格尔木市| 堆龙德庆县| 平南县| 靖江市| 鹿邑县| 陇南市| 镇赉县| 宁阳县| 安岳县| 尚义县| 崇明县| 榆树市| 南和县| 凤城市| 长兴县| 永清县|