Python traceback.format_tb 在编译 Cython 扩展后无法完全工作


  • Python 版本:3.7
  • 赛通版本:0.29.15

源代码:example/example.py

import traceback

def run():
try:
assert 1 == 0
except Exception as e:
log_info = f'Erase failed, exception={type(e).__name__},n{e},n{"".join(traceback.format_tb(e.__traceback__))}'
print('*********************')
print(log_info)
print('*********************')

setup.py

from setuptools import setup
from setuptools.extension import Extension
from Cython.Build import cythonize
setup(name='example',
version="0.0",
ext_modules=cythonize(
[
Extension("example.*", ["example/**/*.py"]),
],
build_dir="build",
compiler_directives=dict(always_allow_keywords=True,
language_level='3')))

生成命令:python setup.py build

编译前的输出

*********************
Erase failed, exception=AssertionError,
,
File "example/example.py", line 6, in run
assert 1 == 0
*********************

编译后的输出

*********************
Erase failed, exception=AssertionError,
,
File "example/example.py", line 6, in example.example.run
*********************

这是意料之中的,因为在Cython将你的代码转译为C并编译本机模块之后,没有Python代码可以参考了。

这个问题 https://github.com/cython/cython/issues/1755 是相关的,但它也已经开放了3 +年。

最新更新