问题描述
循环语句可以有一个
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() #?