如何在 Python 中设置模块的文件名,以便模块中发生的异常使用该文件名?

d0c*_*age 1 python string python-module python-import

我正在使用imp库从字符串(不要问)导入模块。这一切都很好,很花哨,但是当这样的模块出现错误时,我会得到这样的堆栈跟踪:

Traceback (most recent call last):
  File "<string>", line 33, in do_something
  File "<string>", line 20, in really_do_something
Exception: STRING FILENAME EXAMPLE
Run Code Online (Sandbox Code Playgroud)

我尝试将模块上的文件属性设置为有意义的值,但<string>文件名仍用于异常回溯中。

关于如何指定异常中使用的文件名的任何想法?

更新:我正在使用这样的小鬼:动态模块导入试图在不应该做的时候进行相对导入

Mar*_*ers 5

文件名在由 生成的代码对象中设置exec()exec()您应该使用compile()来单独编译代码,而不是与字符串一起使用。这样你就可以设置文件名:

code = compile(file_contents, '/your/filename.py', 'exec')
exec(code, mod.__dict__)
Run Code Online (Sandbox Code Playgroud)