如果没有版本检查或“六”,我怎么能使用`除了MyError,e:`vs`除了MyError作为e`与Python 2& 3一起工作?

时间:2015-08-31 20:18:43

标签: python python-3.x error-handling python-2.5 backport

我正在寻找一种方法来执行此操作,而无需检查所使用的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:

Form

Python 2,版本2.6+:

except MyError as e

Python 2.5-:

except MyError as e
    #OR#
except MyError, e

一点背景:

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

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

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

1 个答案:

答案 0 :(得分:4)

您唯一的选择是避免异常分配并将其从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及更高版本上运行。