下面给出的代码将exec在没有编译错误的情况下通过,但会在"error"语句中导致运行时错误:
globs = {}
exec('''
def main():
print('Hello Python')
error # Makes run-time error
''', globs)
globs['main']()
Run Code Online (Sandbox Code Playgroud)
错误消息是:
Traceback (most recent call last):
File "C:\work\sandbox.py", line 11, in
globs['main']()
File "<string>", line 4, in main
NameError: name 'error' is not defined
仅位置信息File "<string>", line 4, in main不是非常有用,例如在尝试定位可以来自文件的代码的原点时.
请注意,以上是显示问题的简化示例.在实际程序中,代码定义了在主程序中的不同位置执行的若干功能.
有没有办法从exec"<string>"以外的其他位置提供代码,所以如果exec代码中发生异常,则会显示其他位置?
您可以先为compile您的代码添加一个文件名参数:
code = compile('error', 'foo.py', 'exec')
exec(code)
Run Code Online (Sandbox Code Playgroud)
输出:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "foo.py", line 1, in <module>
NameError: name 'error' is not defined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |