当前位置: 首页 > 面试题库 >

循环遍历空迭代器不会引发异常

高奇
2023-03-14
问题内容

我使用的是Python 3.6.7。

我只是注意到,for空列表上的循环甚至不会循环一次。经过一番思考,这对我来说很有意义。即,大小为零(空)的对象上的循环返回零迭代。

iterable = []
for element in iterable:
    pass
print(element)
>>> NameError: name 'element' is not defined

这意味着如果,则不会执行循环内的测试len(iterable) == 0

iterable = []
for element in iterable:
    assert isinstance(element, int)
#nothing happens

那我怎样才能抓住这种情况呢?

当由于iterable为空而导致循环不运行时,是否存在一种紧凑的内置方法来引发错误?

捕获这种特殊情况需要手动进行:

  • iterator在循环之前测试s是否非空
  • 在循环之后测试是否定义了元素。这两种方法对我来说都不是优雅的

我可能最终在每个for循环中都进行了此测试

assert len(iterable) > 0
#loop

要么

#loop
assert "element" in dir() #?

问题答案:

您可以使用语句,也可以使用循环子句。

循环语句可以有一个else子句;当循环 通过穷尽 可迭代 终止 时执行。

例如:

iterator = []
for element in iterator:
    print('This wont print..')
else:
    assert iterator

结果将是:

Traceback (most recent call last):
  File "<pyshell#2>", line 4, in <module>
    assert iterator
AssertionError


 类似资料:
  • 问题 你想遍历一个可迭代对象中的所有元素,但是却不想使用for循环。 解决方案 为了手动的遍历可迭代对象,使用 next() 函数并在代码中捕获 StopIteration 异常。 比如,下面的例子手动读取一个文件中的所有行: def manual_iter(): with open('/etc/passwd') as f: try: while T

  • 所以我在研究树遍历算法。例如,在K-d树遍历中,我们的目标是遍历节点直至叶子。这与其说是一个树搜索,不如说是一个根到叶的遍历。 在这种情况下,递归解决方案就足够了。但是,在C等语言中,递归调用函数需要将值推送到堆栈上,并在堆栈帧之间跳跃等。标准的递归方法类似于: 因此,考虑到二叉树有一个明确的上界(我相信这也可以扩展到其他树类型),以迭代方式执行此遍历是否更有效: 二叉树的最大高度是它的节点数,而

  • Java 8 为 Iterator 引入了一个 forEachRemaining(Consumer action) 默认方法,该方法所需的 Consumer 参数同样也是函数式接口。当程序调用 Iterator 的 forEachRemaining(Consumer action) 遍历集合元素时,程序会依次将集合元素传给 Consumer 的 accept(T t) 方法(该接口中唯一的抽象方法

  • 问题内容: 在Java中,我需要从我的方法中返回一个Iterator。我的数据来自另一个对象,该对象通常可以给我一个迭代器,因此我可以返回它,但是在某些情况下,基础数据为null。为了保持一致,在这种情况下,我想返回一个“空”迭代器,这样我的调用者就不必测试null。 我想写一些类似的东西: 但是Java编译器抱怨返回而不是。投射到也不起作用。 问题答案: 您可以通过以下语法获取Foo类型的空列表

  • 本节我们探索的主题是迭代与循环。循环通常在计算机编程用用于自动执行重复性任务。 在Python中最常用的迭代形式就是for循环了。for循环允许你迭代出列表中所有的项,迭代出来后你可以做任何你想做的事情。 比如,我们创建了一个列表,并打印出其中所有元素的平方。 >>> for value in [0, 1, 2, 3, 4, 5]: ... print(value * value) ... 0 1

  • 我正在研究leetcode问题编号876,其中表示: 给定一个非空的、带有头节点头的单链表,返回链表的一个中间节点。如果有两个中间节点,则返回第二个中间节点。 到目前为止,这就是我写的,但是它在时循环中抛出了一个空指针异常。我想既然时循环每次都在做任何事情之前检查node.next.next是否为空,它就不会抛出异常。我做错了什么?

  • Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Map 系列的集合不一样,Collection 和 Map 系列集合主要用于盛装其他对象,而 Iterator 则主要用于遍历(即迭代访问)Collection 集合中的元素。 Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提

  • 我正在尝试为我制作的Set编写一个自定义的迭代器。我对Interface Iterable的合同有点困惑。它有三个方法:Next()、hasNext()和拿下()。我的设置是不可变的,所以我计划为删除()方法抛出一个Unsupport tedoperationException。它也被称为“延迟生成”,即元素不存储在内存中,而是在需要时创建,但这不是这里也不是那里。 Iterator的Next()