2

我希望得到一些关于使用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(). 有什么比杀死脚本更不极端的吗?我正在考虑将额外的循环和一个更好奇的问题结合起来。

4

3 回答 3

4

因为这是在脚本的开头使用的(正如您所提到的)。使用下面编写的编码模式。并使用return代替sys.exit(实际上,因为您要退出脚本本身,从而完全终止该过程sys.exit并不是一个坏习惯)。

是否使用returnsys.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
于 2013-06-26T05:30:18.103 回答
4

将代码放在 main() 函数中:

def main():
    // your code

if __name__ == '__main__':
    main()

然后你可以通过return退出你的脚本

于 2013-06-26T05:47:04.493 回答
3

正如其他评论者所指出的,一个函数为您提供了使用 return 从脚本中的任何位置退出的选项,这可能是最好的选择 - 我只是想我会提到一件琐事:

从技术上讲 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()

除了您可以尝试/赶上第二个但不是第一个的事实...尽管我假设您的示例是从更大的样本中截取的,其中 return 是更好的逃生路线

于 2013-06-26T06:03:59.807 回答