我有一段不在函数中的代码,比如说
x = 5
y = 10
if x > 5:
print("stopping")
我可以在 print 语句之后放置什么来阻止代码进一步运行?Sys.exit() 有效,但会引发我不希望在程序中出现的错误。我希望它安静地停止代码,就好像它已经到达主循环的末尾一样。谢谢。
我有一段不在函数中的代码,比如说
x = 5
y = 10
if x > 5:
print("stopping")
我可以在 print 语句之后放置什么来阻止代码进一步运行?Sys.exit() 有效,但会引发我不希望在程序中出现的错误。我希望它安静地停止代码,就好像它已经到达主循环的末尾一样。谢谢。
正如 JBernardo 指出的那样,sys.exit()
引发了一个异常。这个例外是SystemExit。当它不被用户代码处理时,解释器干净地退出(调试程序的调试器可以捕获它并保持对程序的控制,例如,由于这种机制)——而不是os._exit()
,它是无条件中止程序。
此异常不会被 捕获except Exception:
,因为SystemExit
它不继承自Exception
。但是,它被一个裸子句抓住了。except:
因此,如果您的程序发现异常,您可能希望通过使用except Exception:
而不是捕获更少的异常except:
。也就是说,不鼓励捕获所有异常,因为这可能会隐藏真正的问题,所以如果可以的话,通过使except
子句(如果有的话)更具体来避免它。
我对这种SystemExit
异常机制为何有用的理解是,用户代码在一个子句中找到之后会遍历任何子句:文件finally
可以干净地关闭,等等;然后解释器捕获用户未捕获的任何内容并永久退出(调试器将改为捕获它以保持解释器运行并获取有关退出程序的信息)。sys.exit()
except
SystemExit
你可以通过这样做来做你正在寻找的东西:
import os
os._exit(1)
sys.exit()
这相当于sys.exit(0)
意味着成功退出。sys.exit(1)
或sys.exit("Some message")
表示失败退出。这两种情况都会引发SystemExit
异常。事实上,当你的程序正常存在时,它就像sys.exit(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 窗口**通过** test_logsIdentifiersAudispdEventWindow.py@16::test_LogsIdentifiersAudispdEventWi 窗口**通过** test_logsIdentifiersGdmSimpleSlaveEventWindow.py@16::test_LogsIdentifiersGdmSimp leSlaveEventWindow 标识符对象 gdm-simple-slave 未在表中列出 **通过** test_logsIdentifiersAuditdEventWindow.py@16::test_LogsIdentifiersAuditdEventWind 现在**通过**
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
尽管出现了错误,但没有打印错误。