-5

我正在寻找一种方法来做到这一点,而无需检查所使用的 Python 版本。

请参阅如何编写与 Python 2 和 Python 3 兼容的异常重新引发代码?有关此的详细信息,因为此问题扩展了该问题。

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

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

蟒蛇 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。

不幸的是,我必须将它作为一个大小有限的文件分发,这对我可以进行多少导入设置了一些限制。

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

4

1 回答 1

4

您唯一的选择是避免异常分配并将其从sys.exc_info()函数的结果中提取出来:

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 及更高版本。

于 2015-08-31T21:01:59.980 回答