我有一个专门用于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它必须导入它进行版本检查),这只是“感觉不对”。是否有更好/更多的自我风格?
答案 0 :(得分:2)
不要sys.exit,它会让其他开发者想要刺伤你。
只需提出ImportError
或Py3kCompatible
错误。
答案 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通过运行此测试。