Exit function in python doesn't work
我对python还不熟悉,我正在尝试使用来自sys的exit函数,但不知何故它在我的计算机上不起作用。这是我的代码:
1 2 3 4 5
| from sys import exit
userResponse = input ("n or y?")
if not (userResponse =="n" or userResponse =="y") :
exit ("ERROR") |
- 是("发生了异常,请使用%tb查看完整的回溯。系统退出:错误")
- 该代码甚至无效,请修复它。
- 哪个python版本以及如何运行代码?
- python 3.6和spyder 3.1.4编辑器
- 我认为这个问题是好的:我同意"系统退出"功能可能会抛出一个异常,暗示(对于不知道它如何工作的人)出了问题,即使在退出非常好的时候。
- 另外:有几个人已经书面回答了这样的问题,即您应该正确地缩进代码。如果原始代码缩进正确,请更新问题。这不是别人能为你做的编辑
exit引发一个SystemExit异常;这就是它终止程序的方式。您的环境在终止后显示该异常不是错误,它只是向您显示原因。我同意你的看法(如,这个PEP),默认行为应该是不打印出这个异常和KeyboardException的回溯消息。
但最终,执行停止了,正如它被设计的那样。
详见文件:https://docs.python.org/2/library/sys.html sys.exit
这里的一些回答最初表明您不能向exit传递字符串。这是错误的:来自文档(强调我的)
The optional argument arg can be an integer giving the exit status (defaulting to zero), or another type of object. If it is an integer, zero is considered"successful termination" and any nonzero value is considered"abnormal termination" by shells and the like. Most systems require it to be in the range 0–127, and produce undefined results otherwise.... If another type of object is passed, None is equivalent to passing zero, and any other object is printed to stderr and results in an exit code of 1. In particular, sys.exit("some error message") is a quick way to exit a program when an error occurs.
号
内置的exit函数也做同样的事情。一般来说,通过从模块导入来隐藏内置函数并不重要,但在这种情况下并不重要。建议的样式为
1 2
| import sys
sys.exit("My exception") |
。
如果这对您来说不具有指导意义,您可以使用OS.exit绕过异常处理。不要无缘无故地这么做
您必须正确缩进:
1 2
| if not (userResponse =="n" or userResponse =="y") :
exit('Error') |
您还可以引发异常以获取更具描述性的错误消息:
1 2 3
| userResponse = input ("n or y?")
if not (userResponse =="n" or userResponse =="y") :
raise ValueError('Does not work') |
号
- 但我需要写一个错误信息!
- 延长了我的回答。
- 我尝试在我的python终端中编写"exit"("error"),它运行得很好。什么时候需要是整数?(我也认为把它留空是可行的)
- 这是一个指向错误信息图片的链接,我仍然可以得到e.top4top.net/p_657e40e81.png
- @Jooj将这些信息添加到你的问题中(不是图片),你会得到更好的答案。@来自docs"sys.exit"("某些错误消息")的mr嘉年华是在发生错误时退出程序的快速方法。
- @mr嘉年华:从内置帮助:exit(…)exit([状态])通过提升systemexit(状态)来退出解释器。如果状态为省略或无,则默认为零(即成功)。如果状态为整数,则将用作系统退出状态。如果它是另一种对象,它将被打印,并且系统退出状态将是一种(即故障)。
- @布鲁诺·斯特维尔:你说得对。但问题是什么呢?问题是否只是缺少压痕?
- @嘉年华先生,也许你应该在评论中要求澄清,而不是直接发表至少部分错误的回答?
- @布鲁诺德斯威勒:要点。下次我会再考虑的!不过,很难抽出时间在这里回答。但一旦你写了一个详尽的答案,还有5个较短的答案…
- 嘉年华先生,这完全是公平的,不想对你大发雷霆,问题有点不清楚。你的回答,IMO,帮助澄清了真正的问题是什么,因为Jooj在你的建议中发表了什么评论。
- 我更新了答案以更正它,并强调了实际问题的解决方案。
- @嘉年华先生张贴的回答比第一个回答更重要。
- @布鲁诺·斯特维尔:你说得对。
追踪@mrcarnimore…
1 2 3 4 5 6
| from sys import exit
userResponse = raw_input("n or y?")
if not (userResponse =="n" or userResponse =="y"):
print('Error Message Here')
exit(1) |
- 我得到这个错误信息:(错误发生了一个异常,使用%tb查看完整的回溯。系统退出:1/users/juhina/anaconda/lib/python3.6/site packages/ipython/c‌&误8203;ore/interactiveshell‌&误8203;.py:2889:userwarning:退出:使用"退出"、"退出"或ctrl-d.warn("退出:使用"退出"、"退出"或ctrl-d.",stacklevel=1)
- 出口何时需要整数?在我的交互控制台2.7上,它可以与"exit(‘message’)一起正常工作。
- @cer:"exit(…)exit([status])通过提升systemexit(status)来退出解释器。如果状态为省略或无,则默认为零(即成功)。如果状态为整数,则将用作系统退出状态。如果它是另一种对象,它将被打印,并且系统退出状态将是一种(即,失败)。"-IOW传递消息是完全合法的。另外,如果要打印错误,请在sys.stderr上打印,sys.stdout用于正常程序输出。
- @Jooj你很困惑,因为你是从IPython运行这个程序的,它正在为你捕获SystemExit异常。