停止Python代码没有错误

时间:2013-04-28 02:35:26

标签: python python-3.3

我有一段不在函数中的代码,比如说

x = 5
y = 10
if x > 5:
    print("stopping")

我可以在print语句之后放置什么来阻止代码进一步运行? Sys.exit()有效,但会引发一个我不希望在程序中出现的错误。我希望它能够悄悄地停止代码,就像它已经到达主循环的末尾一样。感谢。

5 个答案:

答案 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)

使用try-except statements

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

尽管出现错误,但没有打印错误。