名称错误:名称“exit”未定义

74
我使用cxfreeze从planrequest.py创建了一个Windows可执行文件。它似乎工作正常,但当我运行exe文件时,我遇到了NameError: name 'exit' is not defined的错误。 name exit is not defined in python中提到的解决方法是使用import sys,但是我已经使用了import sys。在将其编译为可执行文件之前,该代码作为Python脚本可以正常运行(也就是说,在广泛测试命令行参数之前)。
import socket
import sys

if len(sys.argv) == 1:
    print("Usage:")
    print("PlanRequest [Request String] [Server IP (optional: assumes 127.0.0.1 if omitted)]")
    exit()

#[do stuff with the request]

10
导入sys库,然后调用sys.exit()函数。 - Julien Spronck
你需要使用 from sys import exitcxfreeze 会去除通常设置 builtins.exitsite 初始化。 - anthony sottile
如果你使用了 import sys,那么你应该使用 sys.exit,但是 exit 也可以工作。你是否在代码中覆盖了它,例如 exit = ... - DeepSpace
1
@AnthonySottile 这样吗?我想知道是谁认为这是个好主意。 - DeepSpace
@DeepSpace 不,那是我唯一使用 exit 的地方。 - Tim
1
@DeepSpace 这通常是设置的地方,(至少自 Python 2.5 起就是这样)。 - anthony sottile
2个回答

108

仅导入sys不足以将exit函数置于全局作用域。

你需要执行以下操作之一:

from sys import exit
exit()
或者
import sys
sys.exit()

请注意,在第一种情况下,您也正在使用 argv,因此应该执行 from sys import argv、exit


1
这就是答案,但这真的很痛苦。如果需要 sys.exit,我觉得IDE应该告诉我它是必需的。也许我只是习惯了更加...稳定?...的语言。 - Tim
一个好的IDE应该以某种方式告诉你。 在PyCharm中,如果我输入`import sys` 然后 `exit()`它会在导入行下面打印一个警告 "未使用的导入语句"。 - b1ch0u

15

你需要将该函数应用于 sys:

from sys import exit
exit()

因为 exit 是函数本身,所以你需要用 () 调用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接