【发布时间】:2016-12-23 06:24:15
【问题描述】:
我有 2 个 python 脚本,都使用 sys.stdout、sys.exit() 等。在一个脚本中,PyCharm 将“import sys”突出显示为灰色(意味着它从未使用过),如果我删除导入声明,程序运行良好,包括 sys.stdout 和 sys.exit()。
但是,第二个模块没有将“import sys”突出显示为灰色,如果我尝试在没有该语句的情况下运行它,我会在第一次出现 sys.stdout 时收到错误:
NameError: name 'sys' is not defined
我查阅了 sys 的官方文档,上面写着 "此模块提供对解释器使用或维护的一些变量以及与解释器强交互的函数的访问。它始终可用。"
然而,大多数关于如何使用 sys 的指南或说明都会告诉您导入。
那么,我是否必须导入它? 为什么一个程序需要,而另一个程序不需要?
这两个程序之间可能存在的重要区别:
一个程序有一个主函数,并导入另一个程序。这是不需要导入 sys. 当它作为模块导入另一个时,也许它固有地导入 sys?
【问题讨论】:
-
你会的。我认为
It is always available只是意味着你不能在不安装 sys 模块的情况下安装 python。 -
我想我明白了,“来自____ import *”很奇怪。似乎这会导致它导入目标库导入的任何内容。
-
始终可以导入。这并不意味着它是隐式导入的。您仍然需要明确的
import语句才能使该模块在当前命名空间中可访问。 Explicit is better than implicit. -
@EliezerMiron 是的,“star”导入会使用导入模块中定义的任何名称来破坏您的命名空间,这是在普通脚本中最好避免使用它们的原因之一(尽管它们在包中很有用
__init__.py文件,您可以通过使用__all__来限制它们的影响。FWIW,在标准 Python(又名 CPython)中,sys模块实际上被编译到解释器中,它不会从单独的文件中加载. 但是您仍然需要显式导入它以将sys名称放入您的命名空间中。
标签: python-3.x import python-import sys