【发布时间】:2019-08-25 17:13:34
【问题描述】:
我不是专业的程序员,所以我的知识有一些大漏洞(只是提醒一下)。
我在 python 3.7 中编写了一些库。但现在我想从使用 python 2.7 的 3D 应用程序访问它们。他们拥有的唯一真正的 3.7 特定功能(据我目前所知)是 configparser(与 ConfigParser 相比)和打印功能。
我正在通过捕获导入错误然后加载 2.7 版本来处理 configparser 问题。
我正在尝试通过将此行添加到在 3D 应用程序中运行的脚本的顶部来处理打印功能:
from __future__ import print_function
但是当我导入一个包含 python 3 样式打印函数的模块时,我得到一个语法错误。但是,如果我在加载的模块中包含 from __future__ 语句,则一切正常。显然我在这里遇到了我的知识极限。
这是我正在导入的模块(称为 test.py)的完整代码:
import sys
def print_error():
print("AND THIS IS?", file=sys.stderr)
这是调用此代码的 3D 应用程序(运行 python 2.7)中的代码:
from __future__ import print_function
import sys
sys.path.append("/home/me/Documents/dev/")
print("WHY IS THIS NOT A SYNTAX ERROR?", file=sys.stderr)
from mylib import test
当我运行这段代码时,我得到以下输出:
WHY IS THIS NOT A SYNTAX ERROR?
00:00:08 Traceback (most recent call last):
00:00:08 File "<string>", line 7, in <module>
00:00:08 File "/home/me/Documents/dev/mylib/test.py", line 4
00:00:08 print("AND THIS IS?", file=sys.stderr)
00:00:08 ^
00:00:08 SyntaxError: invalid syntax
00:00:08
但如果我将from __future__ 行放在 test.py 模块中,一切都会正常运行。
我做错了吗?或者我是否需要在每个模块中都有这条线。如果是这样,我该如何协调我将从 python 3.7 调用这些库的时间(我不想加载打印函数from __future__)?
根据我的研究,from __future__ 似乎是一个编译器指令,它控制脚本在运行时的编译方式?可能是?我在这点上不知所措。但这是否意味着每次加载模块时都必须提醒编译器使用from __future__?
感谢您的帮助!
【问题讨论】:
标签: python python-3.7