我希望得到关于sys.exit()
使用的一些建议。我使用sys.exit()
来阻止脚本继续运行:
我的代码:
if x != 20:
query = raw_input("X does not equal 20. Do you want to continue? (Y/N)")
if query in ['y', 'Y']:
pass
else:
sys.exit()
我已经做了一些搜索(并且仍在搜索),但我希望能够清楚地了解sys.exit()
的最佳实践。有没有比杀死剧本更极端的东西?我正在考虑额外循环和更好奇的问题的组合。
答案 0 :(得分:4)
将代码放在main()函数中:
def main():
// your code
if __name__ == '__main__':
main()
然后您可以通过返回
退出脚本答案 1 :(得分:3)
因为这是在脚本的开头使用的(如你所提到的)。使用下面写的编码模式。并且使用return
而不是sys.exit
(实际上,因为您从脚本本身退出,因此完全终止该过程sys.exit
并不是一个坏习惯)。
您是使用return
还是sys.exit
返回适当的整数。这是一个很好的做法。
def do_something():
//process something
return 1
if __name__ == '__main__':
query = raw_input("Do you want to continue? (Y/N)")
if query.lower() == 'y':
//do something
do_something()
else:
print 'ERROR: Cant Understand Input. It has to be (Y/N). Exiting...'
return 0
答案 2 :(得分:3)
正如其他评论者所指出的,一个函数为您提供了从脚本中的任何地方使用返回保释的选项,这可能是最好的选择 - 我只是想提到一件琐事:
从技术上讲,sys.exit会引发SystemExit异常。您可以使用普通的try-catch捕获SystemExit,如果您愿意,可以有效地“取消”退出。如果您有更复杂的代码,其中低级函数可能没有足够的上下文来做出正确的决定,但更高级别的代码可能想要介入并清理,这可能会派上用场。
来自C / C ++和许多其他语言的人从这种策略中得到了荨麻疹,但在Pythonland中并不少见。一般情况下,使用异常进行流量控制是个好主意,但如果您正在使用其他人的功能,或者将较小的脚本组合到更大的应用程序中,则可能会有用。
不要忘记,顺便说一句,如果控制权落到你的脚本的底部,那么它无论如何都会返回'无',所以在你的例子中:
if x != 20:
query = raw_input("X does not equal 20. Do you want to continue? (Y/N)")
if query in ['y', 'Y']:
// do something
与
相同if x != 20:
query = raw_input("X does not equal 20. Do you want to continue? (Y/N)")
if query in ['y', 'Y']:
// do something
else:
sys.exit()
除了你可以尝试/捕捉第二个但不是第一个的事实...虽然我假设你的例子是从一个更大的样本剪断,其中返回是更好的逃生路线