Python异常处理——行号

新手上路,请多包涵

我正在使用 python 来评估一些测量数据。由于许多可能的结果很难处理或可能的组合。有时在评估期间会发生错误。这通常是一个索引错误,因为我超出了测量数据的范围。

很难找出问题发生在代码中的哪个位置。如果我知道错误是在哪一行出现的,那将大有帮助。如果我使用以下代码:

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

不幸的是,这只告诉我存在索引错误。我想知道有关异常的更多详细信息(代码中的行、变量等)以找出发生了什么。可能吗?

谢谢你。

原文由 JeCh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 436
1 个回答

解决方案,打印文件名、行号、行本身和异常描述:

 import linecache
import sys

def PrintException():
    exc_type, exc_obj, tb = sys.exc_info()
    f = tb.tb_frame
    lineno = tb.tb_lineno
    filename = f.f_code.co_filename
    linecache.checkcache(filename)
    line = linecache.getline(filename, lineno, f.f_globals)
    print 'EXCEPTION IN ({}, LINE {} "{}"): {}'.format(filename, lineno, line.strip(), exc_obj)

try:
    print 1/0
except:
    PrintException()

输出:

 EXCEPTION IN (D:/Projects/delme3.py, LINE 15 "print 1/0"): integer division or modulo by zero

原文由 Apogentus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题