我用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,它直接打印这句["别按了","已经到了底了"],,继续按就继续执行这句["别按了","已经到了底了"] 在使用yield进行迭代时,当遍历到最后一个元素后,调用`next()`方法会抛出StopIteration异常,因为没有更多的元素可以生成了。为了解决这个问题,你可以使用try-except语句来捕获StopIteration异常,并在捕获异常后进行相应的处理。
示例代码如下:
def get_comment_message(self):
for i in range(len(self.comment_message)):
yield self.comment_message
while True:
try:
yield "别按了"
except StopIteration:
yield "已经到底了"
在这个示例中,我们在for循环结束后使用while循环来捕获StopIteration异常。当捕获到异常时,我们就生成相应的提示信息,然后再次进入循环等待下一次调用。
这样,即使超出了列表范围,也能通过捕获异常并打印相应的提示信息,而不会导致程序崩溃。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 isdkz 于 2024-5-8 12:25 编辑
from itertools import cycle
def get_comment_message(self):
for i in range(0,len(self.comment_message)):
self.aa = self.comment_message
yield self.aa
else:
yield from cycle((["别按了","已经到了底了"],)) FishC 发表于 2024-5-8 11:59
在使用yield进行迭代时,当遍历到最后一个元素后,调用`next()`方法会抛出StopIteration异常,因为没有更多 ...
解决,谢谢
laiyuanjie 发表于 2024-05-08 12:09
解决,谢谢
不客气,很高兴能为您解决问题。如果还有其他问题,欢迎随时向我提问。祝您编程学习顺利!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 laiyuanjie 发表于 2024-5-8 12:09
解决,谢谢
是真的不给人类一点机会{:10_266:}
页:
[1]