- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
您如何优雅地处理失败的 future 功能导入?如果用户使用 Python 2.5 运行并且我的模块中的第一条语句是:
from __future__ import print_function
为 Python 2.5 编译此模块将失败并显示:
File "__init__.py", line 1
from __future__ import print_function
SyntaxError: future feature print_function is not defined
我想通知用户他们需要使用 Python >= 2.6 重新运行程序,并且可能会提供一些有关如何执行此操作的说明。但是,引用 PEP 236 :
The only lines that can appear before a future_statement are:
- The module docstring (if any).
- Comments.
- Blank lines.
- Other future_statements.
所以我不能这样做:
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 中的这个片段似乎给了内联执行它的希望:
Q: I want to wrap future_statements in try/except blocks, so I can use different code depending on which version of Python I'm running. Why can't I?
A: Sorry! try/except is a runtime feature; future_statements are primarily compile-time gimmicks, and your try/except happens long after the compiler is done. That is, by the time you do try/except, the semantics in effect for the module are already a done deal. Since the try/except wouldn't accomplish what it looks like it should accomplish, it's simply not allowed. We also want to keep these special statements very easy to find and to recognize.
Note that you can import __future__ directly, and use the information in it, along with sys.version_info, to figure out where the release you're running under stands in relation to a given feature's status.
想法?
最佳答案
“我想通知用户他们需要使用 Python >= 2.6 重新运行程序,并且可能会提供一些有关如何执行此操作的说明。”
这不就是 README 文件的用途吗?
这是您的选择。 “包装器”:在运行目标 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__
的内容。您仍然受制于 a from __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"
关于python - 由于旧的解释器版本,如何优雅地处理失败的 future 功能(__future__)导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/388069/
如果“print”没有被列为方法之一,这样说是否正确 __future__.__dict__.keys() 那么我使用的Python版本不提供 future 的打印功能? (我使用的是 Python
我一直对 __future__ 着迷模块——特别是,它能够改变语句在 python 中的解析方式。 最有趣的是如何做类似的事情 from __future__ import print_functio
在 python 2.7 中,通过使用 from __future__ import division, print_function 我现在可以让 print(1/2) 显示 0.5。 但是是否可
Python doc __future__ 在 python 文档中关于 __future__下表显示了 3.7.0b1 中的“可选”和“4.0 中的强制性”注释 但是我仍然可以在 3.8.2 中使用
这有效:(结果 = 0.01) from __future__ import division def division_test(): print 10/1000 division_test
使用 Cython header 指令和使用 future 导入的正确方法是什么? Python 2.7.x 例子: 1: from __future__ import division 2: #cy
我可以放置: from __future__ import absolute_import 在我的包的顶层目录 __init__.py 中,并保证 absolute_import 将应用于在该包或子包
运行语句时 from __future__ import annotations 我收到以下错误: Traceback (most recent call last): File "/usr/li
我正在为一个目前只有 Python 2 的项目贡献代码,以允许它在 Python 3 上运行。我应该输入以下内容吗: from __future__ import (unicode_literals,
我有错误,因为 No module named __future__。我使用 tensorflow,它有 Python2.7。运行程序后,出现如下所示的错误。 import tensorflow Tr
规范:Python 2.7 我正在开发一个包含多个模块的项目,我想在所有模块中激活 __future__ 模块的一些功能。我想在一个模块上导入我需要的所有功能,然后将该单个模块导入到每个其他模块,并让
我已经回答了有关future 模块如何工作的问题。 What is __future__ in Python used for and how/when to use it, and how it w
我想在 exec 函数中使用 future 模块。但看起来只在当前的 exec 函数中生效,而不会在后面的 exec 调用中生效。以下代码显示了问题。第二个 future 模块生效,您可以看到输出 h
所有类都需要先定义才能用作类型提示。为了在某些情况下解决这个问题,__future__ import is recommended 。这就是为什么以下代码可以正常工作(在 Python 3.7 中
我个人不明白为什么 from __future__ 导入必须在文件的顶部。我要问的是为什么,为什么他们必须在顶部?这是什么原因? 最佳答案 它们可以更改语言语法,包括但不限于 import 语句的行为
我不是专业程序员,所以我的知识有很多漏洞(请注意)。 我在 python 3.7 中编写了一些库。但现在我想从使用 python 2.7 的 3D 应用程序访问它们。他们拥有的唯一真正的 3.7 特定
这是我的应用程序中已有的其他导入 import os import sys from google.appengine.ext.webapp import template import cgi im
我的 python 脚本开始于 from __future__ import division 在 RI 我做 library(rPython) python.load("myscript.py")
在 python 2.x 中,两个整数相除返回一个整数。但是,如果您使用 from ___future___ import division 你可以获得一个浮点值: >>> 3/2 1 >>> fro
我编写了以下 doctest x.doctest: This is something: >>> x = 3 + 4 foo bar something else: >>> from
我是一名优秀的程序员,十分优秀!