【问题标题】:Python function exit does not work - why? [duplicate]Python 函数退出不起作用 - 为什么? [复制]
【发布时间】:2021-04-06 02:33:23
【问题描述】:

为什么exit() 在第一次迭代后不停止脚本?

在我看来,它必须在第一次迭代后停止。

>>> def func(q):
...     def funct(y):
...         try:
...             print(y)
...             exit()
...         except:
...             pass
...     funct(q)
...
>>> a=['1','2','3','4','5','6','7']
>>> for x in a:
...     func(x)
...
1
2
3
4
5
6
7
>>>

【问题讨论】:

  • @LydiavanDyke 我明白了,我没有破坏脚本,因为我有例外。 except 什么也不做,脚本继续。谢谢。

标签: python


【解决方案1】:

尝试:sys.exit(0) 并将其移动到全局函数的范围内

import sys 
def func(q):
    def funct(y):
        try:
            print(y)
        except:
             pass
    funct(q)
    sys.exit(0)

a=['1','2','3','4','5','6','7']
for x in a:
     func(x)

Output: 1

【讨论】:

    【解决方案2】:

    为了尽可能直接地回答您的问题,

    为什么exit() 在第一次迭代后不停止脚本?

    因为一个简单的except 将捕获BaseExceptionException,并且由于exit() 引发了一个SystemExit,它是一个BaseException 子类,所以您的代码将吞下异常并传递每个迭代。

    如果你只捕获Exception,请注意区别,它不会抑制BaseException

    >>> from sys import exit
    >>> 
    >>> def func(q):
    ...     def funct(y):
    ...         try:
    ...             print(y)
    ...             exit()
    ...         except Exception:
    ...             pass
    ...     funct(q)
    ... 
    >>> a = ['1','2','3','4','5','6','7']
    >>> for x in a: func(x)
    ... 
    1 # exits
    

    【讨论】:

      猜你喜欢
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 2019-10-06
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多