Python 怪异的TypeError:“非类型”对象不可编辑

Python 怪异的TypeError:“非类型”对象不可编辑,python,generator,Python,Generator,我遇到了一个奇怪的错误。由于这些代码,foo和bar都返回None,但只有在迭代bar时才会引发TypeError 因为foo包含一个yield语句,它是一个生成器,所以返回的结果始终是一个生成器对象,即使无法到达实际的yield语句。生成器在布尔意义上是真的,因此是您的结果。因为foo包含一个yield语句,所以它是一个生成器,所以返回的结果始终是一个生成器对象,即使无法达到实际的yield语句。生成器在布尔意义上是真的,因此是您的结果。如果 print foo() print bar()

我遇到了一个奇怪的错误。由于这些代码,foo和bar都返回None,但只有在迭代bar时才会引发TypeError

因为foo包含一个yield语句,它是一个生成器,所以返回的结果始终是一个生成器对象,即使无法到达实际的yield语句。生成器在布尔意义上是真的,因此是您的结果。

因为foo包含一个yield语句,所以它是一个生成器,所以返回的结果始终是一个生成器对象,即使无法达到实际的yield语句。生成器在布尔意义上是真的,因此是您的结果。

如果

print foo()
print bar()
你得到

<generator object foo at 0x7f8a79fd5eb0>
None
如果你

你得到

<generator object foo at 0x7f8a79fd5eb0>
None
在函数foo和bar中,它们都到达一个空的return语句。它们隐式地不返回任何值。尽管如此,foo还是会生成一个迭代器,因为它包含一个yield语句

因此,当您在函数的输出上循环时,foo将使用迭代器值,而bar将不使用迭代器值,从而导致TypeError。

在函数foo和bar中,它们都到达一个空返回语句。它们隐式地不返回任何值。尽管如此,foo还是会生成一个迭代器,因为它包含一个yield语句


因此,当您在函数的输出上循环时,foo将使用迭代器值,而bar将不使用迭代器值,从而导致一个TypeError。

结果1,2产生了差异。 富报税表:

<generator object foo at 0x7f9e01a91d70>
如果您对收益部分进行注释,代码也会在foo上崩溃


您应该为每个方法返回两个值来求解它。

收益率1,2产生差异。 富报税表:

<generator object foo at 0x7f9e01a91d70>
如果您对收益部分进行注释,代码也会在foo上崩溃


您应该为每个方法返回两个值来求解它。

如果您的函数不包含yield语句,并且您希望它返回空迭代器,那么您应该编写

def empty()
    raise StopIteration

for each in empty():
    print('this will never show up')

若您的函数不包含yield语句,并且希望它返回空迭代器,那个么您应该编写

def empty()
    raise StopIteration

for each in empty():
    print('this will never show up')