Python 函数退出不起作用 - 为啥? [复制]

Posted

技术标签:

【中文标题】Python 函数退出不起作用 - 为啥? [复制]【英文标题】: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 什么也不做,脚本继续。谢谢。 【参考方案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

【讨论】:

以上是关于Python 函数退出不起作用 - 为啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥退出在功能命令中不起作用如何使其工作?

为啥 memset 功能不起作用? [复制]

为啥在 Python 中逆变换不起作用?

为啥交换功能对我不起作用? [复制]

使用 get / http / subscribe 的功能不起作用,为啥? [复制]

为啥我的 to_string() 不起作用? [复制]