Skip to main content
 首页 » 编程设计

python之列表理解失败,但为什么呢

2025年05月04日27mfrbuaa

谁可以向我解释为什么这个列表理解失败:

provider1 = {'id': 1, 'name': 'Een'} 
provider2 = {'id': 2, 'name': 'Twee'} 
provider3 = {'id': 3, 'name': 'Drie'} 
provider4 = {'id': 4, 'name': 'Vier'} 
provider5 = {'id': 5, 'name': 'Vijf'} 
provider6 = {'id': 6, 'name': 'Zes'} 
provider7 = {'id': 7, 'name': 'Zeven'} 
 
providers = [provider1, provider2, provider3, provider4, provider5, provider6, provider7] 
 
 
def testfunc(id): 
    return next(provider for provider in providers if int(provider['id']) == int(id)) 
 
 
for x in range(0, 8): 
    print testfunc(x) 

当我运行它并将 0 传递给函数时,输出为:

Traceback (most recent call last): 
  File "/Users/me/Documents/scratchpad/main.py", line 17, in <module> 
    print testfunc(x) 
  File "/Users/me/Documents/scratchpad/main.py", line 13, in testfunc 
    return next(provider for provider in providers if int(provider['id']) == int(id)) 
StopIteration 
 
Process finished with exit code 1 

它确实适用于非零整数。

请您参考如下方法:

那是因为 next 函数在没有下一个项目时引发 StopIteration。特别是当底层迭代器为空时会发生这种情况,这就是 id == 0 的情况。