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
将捕获BaseException
和Exception
,并且由于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 函数退出不起作用 - 为啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章