最近,我被意外的事情咬了。我想做这样的事情:
try :
thing.merge(iterable) # this is an iterable so I add it to the list
except TypeError :
thing.append(iterable) # this is not iterable, so I add it
好吧,直到我传递了一个应该从Exception继承的对象之前,它一直工作良好。
不幸的是,异常是可迭代的。以下代码不引发任何问题TypeError
:
for x in Exception() :
print 1
有人知道为什么吗?
请注意,发生的情况与任何类型的隐式字符串转换等均无关,而是因为Exception类实现了__getitem
__(),并使用它来返回args元组(ex.args)中的值。您可以通过将整个字符串作为迭代中的第一个也是唯一的项目,而不是遍历字符串而得到的每个字符的结果来看到这一点。
这也让我感到惊讶,但是考虑到这一点,我想这是出于向后兼容的原因。以前(1.5之前的版本)的Python缺少当前类的异常层次结构。相反,将抛出字符串,并使用(通常是)元组参数表示应传递给处理块的任何详细信息。即:
try:
raise "something failed", (42, "some other details")
except "something failed", args:
errCode, msg = args
print "something failed. error code %d: %s" % (errCode, msg)
这样做似乎是为了避免破坏期望参数为元组的1.5之前的代码,而不是不可迭代的异常对象。上面链接的“致命损坏”部分中有一些使用IOError的示例。
字符串异常已经废弃了一段时间,并且在Python 3中逐渐消失。我现在已经检查了Python 3如何处理异常对象,并且看起来它们在那里不再可迭代:
>>> list(Exception("test"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'Exception' object is not iterable
[编辑]检查python3的行为
问题内容: 为什么接口不扩展? 该方法可以简单地返回。 是故意的还是对Java设计师的监督? 能够将循环与这样的迭代器一起使用将很方便: 其中返回迭代器。 问题答案: 因为迭代器通常指向集合中的单个实例。Iterable意味着可以从一个对象获得迭代器以遍历其元素-无需迭代单个实例(迭代器代表的是该实例)。
问题内容: 在Java 5及更高版本中,您具有foreach循环,该循环可以神奇地实现任何实现的对象: 但是,仍然没有实现,这意味着要迭代一个,您必须执行以下操作: 有谁知道为什么仍然不执行? 编辑: 为澄清起见,我不是在谈论枚举的语言概念,而是在Java API中称为“ 枚举 ” 的Java特定类。 问题答案: 枚举没有被修改为支持Iterable,因为它是一个接口,而不是一个具体的类(例如Ve
在Java8中,我们有类stream ,奇怪的是,它有一个方法 所以您希望它实现interface Iterable ,这恰恰需要这个方法,但事实并非如此。 当我想使用foreach循环对流进行迭代时,我必须执行如下操作 我是不是漏了什么?
本文向大家介绍迭代器 Iterator 是什么?相关面试题,主要包含被问及迭代器 Iterator 是什么?时的应答技巧和注意事项,需要的朋友参考一下 terator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。
为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(Iterator)。
本文向大家介绍Python语言什么可以迭代,包括了Python语言什么可以迭代的使用技巧和注意事项,需要的朋友参考一下 示例 Iterable可以是任何一项只能逐一接收的项目。内置的Python集合是可迭代的: 生成器返回可迭代项:
问题内容: 请帮忙。将来自扫描仪的提示显示到控制台后,出现此错误: 问题是来自printf吗?我检查了格式,它看起来正确。 这是程序: 问题答案: 答:因为您的格式说明符与方法中使用的输入参数不匹配。 使用而不是将值用作格式说明符 另外需要额外的逃脱角色 最后,删除不必要的点字符 阅读:Formatter javadoc
问题内容: 在几个地方曾说过,Python强调“要求宽恕比允许容易”(EAFP),应该通过这样的想法来加以限制:只有在真正特殊的情况下才应调用异常。考虑以下情况,在其中我们弹出并推送优先级队列,直到只剩下一个元素: 该异常仅在循环的迭代中引发一次,但这并不是真正的例外,因为我们知道它最终会发生。此设置使我们不必检查是否为空,但是,(也许)它比使用显式条件可读性差。 对于这种非异常程序逻辑,使用异常