gpt4 book ai didi

python - 没有版本检查或 `six`,如何使用 `except MyError, e:`和 `except MyError as e`来与Python 2&3一起使用?

转载 作者:行者123 更新时间:2023-12-03 09:15:22 26 4
gpt4 key购买 nike

我正在寻找一种无需检查使用的Python版本即可执行此操作的方法。

有关此详细信息,请引用How to write exception reraising code that's compatible with both Python 2 and Python 3?,因为此问题扩展了该问题。

基本上,我可以将其概括为:“如果基于方法的异常引发基于语言的异常怎么办?”

根据Python try...except comma vs 'as' in except,以下显示了Python 3和Python 2的正确语法:

Python 3:

except MyError as e

Python 2,适用于2.6+版本:
except MyError as e
#OR#
except MyError, e

Python 2.5-:
except MyError, e

一点背景:

我遇到一个棘手的情况,在许多古老的Linux机器上都需要运行脚本,在该机器上将使用各种不同的Python版本,包括Python 2.5。

不幸的是,我必须将此文件分发为单个大小受限的文件,这对我可以执行的导入量施加了一些限制。

另外,我对其中之一可能会误报其版本的情况或对无需检查版本即可使用的代码感兴趣。当然,可以解决此问题。

最佳答案

您唯一的选择是避免异常分配,而是将其从 sys.exc_info() function的结果中拉出:

try:
# ...
except Exception: # note, no ", e" or "as e"
import sys
e = sys.exc_info()[1]

这将适用于Python 1.5及更高版本。

但是,您可能会遇到其他不兼容和困难的情况。编写多语种Python代码(可在Python 2.x和3.x上运行的代码)仅在Python 2.6及更高版本上才真正可行。

关于python - 没有版本检查或 `six`,如何使用 `except MyError, e:`和 `except MyError as e`来与Python 2&3一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319317/

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