python中的退出函数不起作用

时间:2017-10-19 14:18:55

标签: python if-statement exit

我是Python的新手,我正在尝试使用exit中的sys函数,但不知怎的,它在我的计算机上无法正常工作。这是我的代码:

from sys import exit

userResponse = input ("n or y?")
if not (userResponse =="n" or userResponse =="y") :
exit ("ERROR")

4 个答案:

答案 0 :(得分:1)

你必须正确缩进:

if not (userResponse =="n" or userResponse =="y") :
    exit('Error')

您还可以引发异常以获取更具描述性的错误消息:

userResponse = input ("n or y?")
if not (userResponse =="n" or userResponse =="y") :
    raise ValueError('Does not work')

答案 1 :(得分:1)

退出会引发SystemExit个异常;这就是它终止程序的方式。您的环境在终止后显示该异常不是一个错误,它只是向您显示原因。我同意你的意见(例如,this PEP),默认行为应该是打印出此异常的追溯消息,以及KeyboardException

但最终,执行停止了,因为它的目的是为了做。

有关详细信息,请参阅文档: https://docs.python.org/2/library/sys.html#sys.exit

此处的一些答案最初表明您无法将字符串传递给exit。这是错误的:来自文档(强调我的)

  

可选参数arg可以是一个整数,给出退出状态(默认为零)或其他类型的对象。如果它是整数,则零被认为是“成功终止”,并且任何非零值被贝壳等视为“异常终止”。大多数系统要求它在0-127范围内,并产生未定义的结果,否则....如果传递另一种类型的对象,则无效等于传递零,并且任何其他对象被打印到stderr并导致退出代码为1. 特别是,sys.exit(“某些错误消息”)是发生错误时退出程序的快捷方法

内置exit函数做同样的事情。通常,通过从模块导入来遮蔽内置函数并不是很好,尽管在这种情况下它并不重要。推荐的风格是

import sys
sys.exit("My exception")

如果这似乎不直观,您可以使用os._exit绕过异常处理。不要没有原因

答案 2 :(得分:0)

跟进@MrCarnivore ......

from sys import exit

userResponse = raw_input("n or y?")
if not (userResponse =="n" or userResponse =="y"):
     print('Error Message Here')
     exit(1)

答案 3 :(得分:0)

在尝试退出脚本而没有引发异常时,我遇到了问题。最适合我的情况的是os._exit(exitcode)