我遇到了一个奇怪的错误。作为这些代码,foo()
和bar()
都会返回None
,但只有在迭代bar()
时才会引发TypeError
def foo():
if True:
return
yield 1, 2
def bar():
return
for a, b in foo():
print a + b
for a, b in bar():
print a + b
答案 0 :(得分:3)
因为foo
包含yield
语句,所以它是一个生成器,因此返回的结果始终是生成器对象,即使无法达到实际的yield语句也是如此。生成器在布尔意义上是真的,因此是你的结果。
答案 1 :(得分:0)
如果你
print foo()
print bar()
你得到了
<generator object foo at 0x7f8a79fd5eb0>
None
答案 2 :(得分:0)
在您的函数foo
和bar
中,它们都会显示空的return
语句。他们含蓄地return None
。 foo
将生成一个迭代器,因为它包含yield
语句。
因此,当您循环遍历函数的输出时,foo
将使用迭代器值,而bar
则不会,导致TypeError
。
答案 3 :(得分:0)
收益率1,2产生差异。 foo返回:
<generator object foo at 0x7f9e01a91d70>
栏返回:
None
如果你评论屈服部分,代码也会在foo()上崩溃。
您应该为每个方法返回两个值来解决它。
答案 4 :(得分:0)
如果你的函数不包含 yield 语句,并且你希望它返回“空迭代器”,你应该写
def empty()
raise StopIteration
for each in empty():
print('this will never show up')