如果运行Python 3,确保导入模块的“最佳”方法是什么?

时间:2012-05-15 16:03:37

标签: python-3.x

我有一个专门用于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 个答案:

答案 0 :(得分:2)

不要sys.exit,它会让其他开发者想要刺伤你。

只需提出ImportErrorPy3kCompatible错误。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果range(0)== []:引发RuntimeError('此代码需要Python 3')

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

答案 3 :(得分:0)

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

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

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

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