【发布时间】:2015-05-04 08:33:26
【问题描述】:
假设我有以下多行字符串:
cmd = """
a = 1 + 1
b = [
2 + 2,
4 + 4,
]
bork bork bork
"""
我想在特定范围内执行它:
scope = {}
exec( cmd, scope )
print scope[ 'b' ]
在命令的第 6 行有一个SyntaxError,我希望能够向用户报告。我如何获得行号?我试过这个:
try:
exec( cmd, scope ) # <-- let's say this is on line 123 of the source file
except Exception, err:
a, b, c = sys.exc_info()
line_number = c.tb_lineno # <-- this gets me 123, not 6
print "%s at line %d (%s)" % ( a, line_number, b.message )
...但是我得到了exec 语句的行号,而不是多行命令中的行号。
更新:事实证明,我为这个示例任意选择的异常类型 SyntaxError 的处理不同于任何其他类型的处理。澄清一下,我正在寻找一种可以应对任何异常的解决方案。
【问题讨论】:
-
你看过
pdb吗?
标签: python python-2.7