相关疑难解决方法(0)

如何优雅地处理由于旧解释器版本导致的失败的未来功能(__future__)导入?

您如何优雅地处理失败的未来功能导入?如果用户使用Python 2.5运行,并且我的模块中的第一个语句是:

from __future__ import print_function
Run Code Online (Sandbox Code Playgroud)

为Python 2.5编译此模块将失败,并带有:

  File "__init__.py", line 1
    from __future__ import print_function
SyntaxError: future feature print_function is not defined
Run Code Online (Sandbox Code Playgroud)

我想告诉用户他们需要用Python> = 2.6重新运行程序,并且可能提供一些如何操作的说明.但是,引用PEP 236:

在future_statement之前可以出现的唯一行是:

  • 模块docstring(如果有的话).
  • 评论.
  • 空白行.
  • 其他future_statements.

所以我做不了类似的事情:

import __future__

if hasattr(__future__, 'print_function'):
    from __future__ import print_function
else:
    raise ImportError('Python >= 2.6 is required')
Run Code Online (Sandbox Code Playgroud)

因为它产生:

  File "__init__.py", line 4
    from __future__ import print_function
SyntaxError: from __future__ imports must occur at the beginning of the file
Run Code Online (Sandbox Code Playgroud)

来自PEP的这个片段似乎给了内联的希望:

问:我想将future_statements包装在try/except块中,因此我可以使用不同的代码,具体取决于我正在运行的Python版本.为什么我不能?

A:对不起!try/except是一个运行时功能; future_statements主要是编译时的噱头,你的try/except在编译完成后很久就会发生.也就是说,当你尝试使用/ except时,对模块有效的语义已经完成了.由于试/除非将无法完成它看起来 像它应该做到,它只是不允许的.我们还希望保持这些特殊陈述非常容易找到和识别.

请注意,您 …

python python-import

68
推荐指数
3
解决办法
5万
查看次数

标签 统计

python ×1

python-import ×1