【发布时间】:2026-02-15 14:30:01
【问题描述】:
我有一个包可以执行其他模块并对它们执行一些方法。我需要做的一件事是模块执行的完整回溯,如果它遇到错误。目前我正在执行模块并像这样获取回溯:
try:
module = importlib.import_module(os.path.splitext(args.file)[0])
except Exception as e:
traceback.print_tb(e.__traceback__)
例如,如果我有这个模块:
# example.py
print({}[1])
如果我单独运行代码时得到的引用是这样的:
Traceback (most recent call last):
File "example.py", line 2, in <module>
print(my_dict[1])
KeyError: 1
这是预期的输出,但我的代码提供了额外的不需要的信息:
File "/home/username/Desktop/Coding/Python/packagename/packagename/__main__.py", line 15, in <module>
module = importlib.import_module(os.path.splitext(args.file)[0])
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/username/Desktop/Coding/Python/packagename/example.py", line 2, in <module>
print(my_dict[1])
我怎样才能只获得预期的输出,而不是完整的回溯?
编辑
所以,我找到了另一个解决方案,但我必须执行两次:
try:
subprocess.call(f"python3 {args.file}", shell=True)
importlib.import_module(os.path.splitext(args.file)[0])
except Exception as e:
# Function that does something with e
foo(e)
这不是很好的代码,所以我想知道如何才能使它变得更好?谢谢!
【问题讨论】:
标签: python-3.x traceback python-importlib