我用yield这个关键字,遍历后超出了列表范围打印了错误,得怎么处理好一点
def get_comment_message(self):for i in range(0,len(self.comment_message)):
self.aa = self.comment_message
i += 1
yield self.aa
else:
yield ["别按了","已经到了底了"]
我遍历了self.comment_message,如果后面没有了,就打印这句"别按了","已经到了底了",,但是如果接着按的话,就会抛出这个异常:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "C:\Users\Administrator\PycharmProjects\Baohui_Attendance\views.py", line 42, in next_message
b = next(self.menber_comment_message)
StopIteration
所以我得怎么处理比较好,就是遍历完了之后,如果接着按bottom,它直接打印这句["别按了","已经到了底了"],,继续按就继续执行这句["别按了","已经到了底了"] 你可以在捕获到StopIteration异常后,使用一个标志位来控制是否继续执行。以下是一个示例代码:
class Example:
def __init__(self, comment_message):
self.comment_message = comment_message
self.flag = True
def get_comment_message(self):
for i in range(len(self.comment_message)):
yield self.comment_message
else:
self.flag = False
# 示例用法
example = Example(["消息1", "消息2", "消息3"])
gen = example.get_comment_message()
while True:
try:
message = next(gen)
print(message)
except StopIteration:
if example.flag:
print("别按了,已经到底了")
break
在这个示例中,通过引入标志位`flag`来控制是否继续执行的逻辑。当遍历结束时,将`flag`设置为False,并在捕获到StopIteration异常后判断`flag`的值,如果为True,则输出"别按了,已经到底了"。
这样,就能够在遍历完列表后,控制是否继续执行后续代码,避免抛出StopIteration异常。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 isdkz 于 2024-5-8 12:25 编辑
from itertools import cycle
def get_comment_message(comment_message):
for i in range(0,len(comment_message)):
aa = comment_message
yield aa
else:
yield from cycle((["别按了","已经到了底了"],))
test = get_comment_message()
print(next(test))
print(next(test))
print(next(test))
print(next(test))
print(next(test))
print(next(test))
print(next(test)) try...except StopIteration:{:10_256:}
简单易用
页:
[1]