微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决循环遍历空迭代器不会引发异常

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

循环语句可以有一个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

解决方法

我使用的是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() #?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。