0

我有一个专门用于 Python 3 的模块。确保如果有人尝试在 Python 2 中导入它会炸毁/引发某种异常的最佳方法是什么?

现在我有:

# all my imports that I need, ex:
import sys

# blow up if not python 3
if sys.version_info.major < 3:
    sys.exit("This is not Python 3")

但我真的不喜欢额外的导入(如果我的模块不需要 sys 它必须导入它以进行版本检查),这并不完全“感觉正确”。有更好/更惯用的方式吗?

4

4 回答 4

2

不要 sys.exit,它会让其他开发人员想要刺你的脸。

只需抛出您制造的一个ImportError或一些Py3kCompatible错误。

于 2012-05-15T16:04:45.463 回答
0

ImportError 将完成这项工作,但如果您使用外部库,那么这将是一个问题。

于 2012-05-15T16:06:48.570 回答
0

if range(0)==[]: raise RuntimeError('此代码需要 Python 3')

可能是我能想到的最快的测试和最好的例外。

于 2012-05-29T00:52:51.057 回答
0

我唯一能想到的就是专门针对已更改的语言功能进行测试:

try:
    lambda: print()
except SyntaxError:
    raise ImportError('This code requires Python 3')

(尽管有重新学习的所有麻烦print,我真的很喜欢新的函数语法允许它在 lambdas 中使用)

请注意,此代码实际上不会在 python3 中调用 print,它只是返回一个函数,如果您调用它,它将调用 print,但它只是被丢弃而不是被调用,因此您不会通过运行在 STDOUT 上得到一个草率的换行符这个测试。

于 2012-07-21T17:05:37.970 回答