我有一段不在函数中的代码,比如说
x = 5
y = 10
if x > 5:
print("stopping")
我可以在print语句之后放置什么来阻止代码进一步运行? Sys.exit()有效,但会引发一个我不希望在程序中出现的错误。我希望它能够悄悄地停止代码,就像它已经到达主循环的末尾一样。感谢。
答案 0 :(得分:10)
正如JBernardo指出的那样, sys.exit()
引发了异常。此例外是SystemExit。当它没有被用户代码处理时,解释器会干净地退出(调试程序调试程序可以捕获它并保持对程序的控制,例如,由于这种机制) - 与os._exit()
相反,这是except Exception:
无条件堕胎。
未被SystemExit
捕获,因为Exception
未从except:
继承。但是,它通过裸except Exception:
子句被捕获。
因此,如果您的程序发现异常,您可能希望使用except:
代替except
来减少异常。也就是说,不鼓励捕获所有异常,因为这可能会隐藏真正的问题,所以如果可以的话,通过使SystemExit
子句(如果有的话)更具体来避免它。
我对此finally
异常机制有用的原因的理解是,用户代码在 a {{1>之后通过任何sys.exit()
子句在except
子句中找到:文件可以干净地关闭等等;然后解释器捕获任何未被用户捕获的SystemExit
并退出(调试器会捕获它以便保持解释器运行并获取有关退出程序的信息)。
答案 1 :(得分:5)
你可以通过这样做来做你想要的事情:
import os
os._exit(1)
答案 2 :(得分:0)
sys.exit()
的 sys.exit(0)
表示退出成功。 sys.exit(1)
或sys.exit("Some message")
表示退出失败。两种情况都会引发SystemExit
异常。事实上,当你的程序正常存在时,它就像调用sys.exit(0)
一样。
答案 3 :(得分:0)
当我遇到这个帖子时,我正在寻找一种方法来退出程序而没有错误,没有例外,让代码显示为“PASSED'”,并继续运行其他测试文件。对我来说,解决方案是使用 return 语句。
.
.
.
if re.match("^[\s\S]*gdm-simple-slave[\s\S]*$", driver.find_element_by_css_selector("BODY").text) == None:
print "Identifiers object gdm-simple-slave not listed in table"
return
else:
driver.find_element_by_xpath("//input[@value='gdm-simple-slave']").click()
.
.
.
这使我能够在保持调试器运行的同时运行多个程序......
test_logsIdentifiersApache2EventWindow.py@16::test_LogsIdentifiersApache2EventWi ndow **PASSED** test_logsIdentifiersAudispdEventWindow.py@16::test_LogsIdentifiersAudispdEventWi ndow **PASSED** test_logsIdentifiersGdmSimpleSlaveEventWindow.py@16::test_LogsIdentifiersGdmSimp leSlaveEventWindow Identifiers object gdm-simple-slave not listed in table **PASSED** test_logsIdentifiersAuditdEventWindow.py@16::test_LogsIdentifiersAuditdEventWind ow **PASSED**
答案 4 :(得分:-1)
a = [1, 2, 3, 4, 5]
for x in xrange(0,5):
try:
print a[x+1] #this is a faulty statement for test purposes
except:
exit()
print "This is the end of the program."
<强>输出:强>
> python test.py
2
3
4
5
尽管出现错误,但没有打印错误。