我正在寻找一种方法来执行此操作,而无需检查所使用的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。
不幸的是,我必须将其作为单个大小限制文件进行分发,这会对我可以执行多少导入设置一些限制。
此外,我对其中一个可能误报其版本的情况感兴趣,或者对可以在不必检查版本的情况下使用的代码感兴趣。当然,这可以解决。
答案 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及更高版本上运行。