Python異常處理 - 行號



0 Answers

要簡單地獲取行號,您可以使用sys ,如果您想擁有更多,請嘗試使用traceback模塊。

import sys    
try:
    [][2]
except IndexError:
    print 'Error on line {}'.format(sys.exc_info()[-1].tb_lineno)

印刷品

Error on line 3

traceback模塊文檔中的示例

import sys, traceback

def lumberjack():
    bright_side_of_death()

def bright_side_of_death():
    return tuple()[0]

try:
    lumberjack()
except IndexError:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    print "*** print_tb:"
    traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
    print "*** print_exception:"
    traceback.print_exception(exc_type, exc_value, exc_traceback,
                              limit=2, file=sys.stdout)
    print "*** print_exc:"
    traceback.print_exc()
    print "*** format_exc, first and last line:"
    formatted_lines = traceback.format_exc().splitlines()
    print formatted_lines[0]
    print formatted_lines[-1]
    print "*** format_exception:"
    print repr(traceback.format_exception(exc_type, exc_value,
                                          exc_traceback))
    print "*** extract_tb:"
    print repr(traceback.extract_tb(exc_traceback))
    print "*** format_tb:"
    print repr(traceback.format_tb(exc_traceback))
    print "*** tb_lineno:", exc_traceback.tb_lineno
Question

我正在使用python來評估一些測量數據。 由於許多可能的結果,難以處理或可能的組合。 有時在評估期間會發生錯誤。 它通常是索引錯誤,因為我超出了測量數據的範圍。

很難找到問題發生在代碼中的哪個位置。 如果我知道錯誤被引發到哪一行,那將會有很大幫助。 如果我使用以下代碼:

try:
    result = evaluateData(data)
except Exception, err:
    print ("Error: %s.\n" % str(err))

不幸的是,這只能告訴我存在索引錯誤。 我想知道有關異常的更多細節(代碼行,變量等),以了解發生了什麼。 可能嗎?

謝謝。




Related