gpt4 book ai didi

python - 原始回溯异常 - 2.6-3.X 兼容版本

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:04 25 4
gpt4 key购买 nike

假设我有一个像这样的上下文管理器 - 它在 Python 2.X 中工作并在退出时保留回溯。

class MyContextManager(object):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
raise AssertionError("Failed :-/"), None, traceback

在Python 3中,引发是一个语法错误,但我认为你可以只设置__traceback__参数。

def __exit__(self, exc_type, exc_value, traceback):
e = AssertionError("Failed :-/")
e.__traceback__ = traceback
raise e

是否有一种方法可以保留与 Python 2 和 Python 3 兼容的回溯(即,不会在两者上生成语法错误)?我现在有点卡住了。它需要在 2.6、2.7、3.2 和 3.3 中工作。目标是确保用户仍然看到早期的回溯。

最佳答案

我想到的一个丑陋但可行的答案(受到 Ned Batchelder's guide to Python 3 compatibility 的启发)是编写一个函数来评估语法破坏代码(仅当它是 Python 2 时)。例如:

if sys.version_info[0] == 2:
s = """
def raise_with_traceback(exc, traceback):
raise exc, None, traceback
"""
exec (s)
else:
def raise_with_traceback(exc, traceback):
raise exc.with_traceback(traceback)

[向 @user2357112 提出有关 Python 3 首选 with_traceback 的提示]。

关于python - 原始回溯异常 - 2.6-3.X 兼容版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18555311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com