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

标签 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:

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/

相关文章:

python - 将 read_sql 与 pyODBC 连接一起使用到 access 数据库是否安全?

logging - 如何禁用部分代码的错误/异常处理程序?

python - 我如何使用 pandas 在 Excel 工作表的某些单元格上写注释

python - 如何在创建表期间在 SQLite 中设置默认日期值

python - 使用 vtkTubeFilter 创建闭环

python-3.x - 在 ANN 模型中加载 pickle 时接收错误

loops - 一行用元组循环函数调用的结果 (results, err)

vb.net - 无法解决的错误?

python - 天气 "events"根据 Pandas 的时差进行分组

python - 数据验证 - 邮政编码