gpt4 book ai didi

python-3.x - 如何确定for循环是异常退出还是从迭代器内部中断

转载 作者:行者123 更新时间:2023-12-05 07:33:20 28 4
gpt4 key购买 nike

我试图在我的生成器中处理清理,但前提是循环体引发异常,而不是使用 break 退出:

def f():
for v in [1,2,99,4]:
try:
yield v
except GeneratorExit:
# how to determine whether generator exited via an exception?
print("generator exited")
raise

但是,我还没有找到一种方法来区分 break 和迭代器中的 exception

即以下代码

for v in f():
if v == 99:
break

将输出:

generator exited

还有这段代码

for v in f():
if v == 99:
raise Exception("boom")

将输出:

 generator exited
---------------------------------------------------------------------------
Exception: boom

所以从生成器的外部,差异是可以观察到的,但是我找不到在生成器的内部观察这个的方法 f()

最佳答案

也许,这有帮助?

def f():
for v in [1,2,99,4]:
try:
if v == 99:
raise Exception('Boom!')
yield v
except:
print("generator exited")
else:
print("generator not exited")

for value in f():
print(value)

============================================= =======================

可能我还是没弄明白问题所在。无论如何,这是我的第二次尝试:

import sys

class MyException(Exception):
pass

def f():
a = input('Break, except, loop, or quit (b/e/l/q)? ' ).strip().lower()
if a == 'q':
sys.exit()
if a == 'l':
pass # just the normal loop
for v in [1, 2, 99, 4]:
if a == 'b':
break
try:
if a == 'e':
raise MyException
yield v
except MyException:
print('Inside Generator: MyException')
return
else:
print('Inside Generator: loop terminated!')
return
print('Inside Generator: break')

for value in f():
print(value)

关于python-3.x - 如何确定for循环是异常退出还是从迭代器内部中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50672139/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com