【问题标题】:How do I abort the execution of a Python script? [duplicate]如何中止 Python 脚本的执行? [复制]
【发布时间】:2010-09-15 19:33:10
【问题描述】:

我有一个简单的 Python 脚本,如果满足某个条件,我想停止执行。

例如:

done = True
if done:
    # quit/stop/exit
else:
    # do other stuff

本质上,我正在寻找与函数体中的“return”关键字等效的东西,它允许代码流退出函数而不执行剩余的代码。

【问题讨论】:

    标签: python syntax scripting exit


    【解决方案1】:

    exit() 应该可以解决问题

    【讨论】:

    • 比我快三秒 :P
    • 我什至首先在 shell 中对其进行了测试 :-)
    • 该死的,我没有看到这个/反应及时(当然也在口译员中进行测试)握拳 ;)
    • 这仅适用于 2.5 及更高版本
    【解决方案2】:

    exit() 应该这样做。

    【讨论】:

      【解决方案3】:

      如果整个程序应该停止使用 sys.exit() 否则只使用一个空返回。

      【讨论】:

      • return 不能在函数之外工作。
      【解决方案4】:
      import sys
      sys.exit()
      

      【讨论】:

        【解决方案5】:

        您可以将脚本主体放入一个函数中,然后您可以从该函数返回。

        def main():
          done = True
          if done:
            return
            # quit/stop/exit
          else:
            # do other stuff
        
        if __name__ == "__main__":
          #Run as main program
          main()
        

        【讨论】:

          【解决方案6】:

          要退出您可以使用的脚本,

          import sys
          sys.exit()
          

          您还可以提供退出状态值,通常是整数。

          import sys
          sys.exit(0)
          

          以零退出,这通常被解释为成功。非零代码通常被视为错误。默认以零退出。

          import sys
          sys.exit("aa! errors!")
          

          打印“aa!错误!”并以状态码 1 退出。

          os 模块中还有一个 _exit() 函数。 sys.exit() 函数引发 SystemExit 异常以退出程序,因此可以执行 try 语句和清理代码。 os._exit() 版本不这样做。它只是结束程序而不进行任何清理或刷新输出缓冲区,因此通常不应使用它。

          Python docs 表示 os._exit() 是结束通过调用 os.fork() 创建的子进程的正常方法,因此它在某些情况下确实有用。

          【讨论】:

          • sys.stdout.flush()os._exit(0) 配对正是我所需要的。谢谢!
          • 这不适用于我的 Anaconda python。 sys.exit() Traceback(最近一次调用最后):文件“”,第 1 行,在 sys.exit() AttributeError: 'System' object has no attribute 'exit'
          • 当前 Python 3.7.0 在使用sys.exit(0) 时会发出警告:SystemExit: 0 C:\Python37\lib\site-packages\IPython\core\interactiveshell.py:2969: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)。可以吗?它出现只是因为我使用的是 iPython 吗?
          【解决方案7】:

          您可以使用:

          import sys
          sys.exit(...)
          

          或:

          raise SystemExit(...)
          

          可选参数可以是退出代码或错误消息。两种方法是相同的。我以前更喜欢 sys.exit,但最近我转而使用提升 SystemExit,因为它似乎在其余代码中更突出(由于 raise 关键字)。

          【讨论】:

            【解决方案8】:

            试试

            sys.exit("message")
            

            就像perl一样

            die("message")
            

            如果这是您正在寻找的。即使从导入的模块 / def /function 调用它也会终止脚本的执行

            【讨论】:

            • 没有答案建议这种方法吗?
            猜你喜欢
            • 2011-03-23
            • 1970-01-01
            • 1970-01-01
            • 2010-10-07
            • 2017-09-03
            • 2012-09-14
            • 1970-01-01
            • 1970-01-01
            • 2011-05-13
            相关资源
            最近更新 更多