本文介绍了如何正确处理由于解释器版本旧而导致的未来功能(__未来__)导入失败?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何正确处理失败的未来功能导入?如果用户正在使用Python2.5运行,并且我的模块中的第一条语句是:
from __future__ import print_function
为Python2.5编译此模块将失败,并显示:
File "__init__.py", line 1
from __future__ import print_function
SyntaxError: future feature print_function is not defined
我想通知用户,他们需要使用Python>=2.6重新运行程序,并可能提供一些如何执行此操作的说明。然而,引用PEP 236:
所以我不能做这样的事情:
import __future__
if hasattr(__future__, 'print_function'):
from __future__ import print_function
else:
raise ImportError('Python >= 2.6 is required')
因为它产生:
File "__init__.py", line 4
from __future__ import print_function
SyntaxError: from __future__ imports must occur at the beginning of the file
这段来自PEP的代码似乎给了内联执行该操作的希望:
想法?
推荐答案
"我想通知用户,他们需要使用PYTHON>=2.6重新运行程序,并可能提供一些如何执行此操作的说明。"
这不就是自述文件的用途吗?
这是您的替代方案。"包装器":在运行目标AOP之前检查环境的一小段Python代码。
文件:appwrapper.py
import sys
major, minor, micro, releaselevel, serial = sys.version_info
if (major,minor) <= (2,5):
# provide advice on getting version 2.6 or higher.
sys.exit(2)
import app
app.main()
什么是"直接进口"。您可以查看__future__
的内容。您仍然受到afrom __future__ import print_function
是给编译器的信息这一事实的约束,但您可以在导入执行实际工作的模块之前四处查看。
import __future__, sys
if hasattr(__future__, 'print_function'):
# Could also check sys.version_info >= __future__. print_function.optional
import app
app.main()
else:
print "instructions for upgrading"
这篇关于如何正确处理由于解释器版本旧而导致的未来功能(__未来__)导入失败?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!