鱼C论坛

 找回密码
 立即注册
查看: 90|回复: 5

我用yield这个关键字,遍历后超出了列表范围打印了错误,得怎么处理好一点

[复制链接]
发表于 2024-5-8 11:58:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
    def get_comment_message(self):
        for i in range(0,len(self.comment_message)):
            self.aa = self.comment_message[i]
            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,它直接打印这句["别按了","已经到了底了"],,继续按就继续执行这句["别按了","已经到了底了"]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-8 11:59:06 | 显示全部楼层
在使用yield进行迭代时,当遍历到最后一个元素后,调用`next()`方法会抛出StopIteration异常,因为没有更多的元素可以生成了。为了解决这个问题,你可以使用try-except语句来捕获StopIteration异常,并在捕获异常后进行相应的处理。

示例代码如下:
  1. def get_comment_message(self):
  2.     for i in range(len(self.comment_message)):
  3.         yield self.comment_message[i]
  4.         
  5.     while True:
  6.         try:
  7.             yield "别按了"
  8.         except StopIteration:
  9.             yield "已经到底了"
复制代码


在这个示例中,我们在for循环结束后使用while循环来捕获StopIteration异常。当捕获到异常时,我们就生成相应的提示信息,然后再次进入循环等待下一次调用。

这样,即使超出了列表范围,也能通过捕获异常并打印相应的提示信息,而不会导致程序崩溃。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-8 12:07:03 | 显示全部楼层
本帖最后由 isdkz 于 2024-5-8 12:25 编辑
  1. from itertools import cycle

  2. def get_comment_message(self):
  3.     for i in range(0,len(self.comment_message)):
  4.         self.aa = self.comment_message[i]
  5.         yield self.aa
  6.     else:
  7.         yield from cycle((["别按了","已经到了底了"],))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-8 12:09:35 | 显示全部楼层
FishC 发表于 2024-5-8 11:59
在使用yield进行迭代时,当遍历到最后一个元素后,调用`next()`方法会抛出StopIteration异常,因为没有更多 ...

解决,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-8 12:09:52 | 显示全部楼层


不客气,很高兴能为您解决问题。如果还有其他问题,欢迎随时向我提问。祝您编程学习顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-8 12:12:41 | 显示全部楼层


是真的不给人类一点机会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 01:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表