什么是NameError,我该如何解决?

时间:2019-02-02 23:04:43

标签: python

我定义了一个函数,用于返回列表中某些事件的索引。但是,当我尝试运行doctests时,它返回一个NameError,但退出时带有“退出代码0”,这意味着它没有问题。

Field

运行此命令后,出现以下错误消息:

GameManager

我不明白我的代码的哪一部分导致了这个问题。

2 个答案:

答案 0 :(得分:1)

您的错误在这里:

for value in item:
    value += 1

itemshoes列表的元素,shoes的所有元素都是字符串。您不能在字符串中添加整数。因此value += 1会引发错误,因此整个函数都会失败。您永远不会获得return变量。从这里错误。

乍看之下,您根本不需要这两行,之后就再也不会使用value了。尝试删除它们。

编辑

如果这些行背后的含义是使每个索引值增加1(如我从文档字符串中所怀疑的那样(感谢@ekhumoro使我意识到这一点),则可以编辑列表理解以实现预期的目标。

indices = [i+1 for i, x in enumerate(shoes) if x == item]

答案 1 :(得分:0)

我写了一个简短的

def build_placements(shoes):
    """Return a dictionary where each key is a company, and each value
    is a list of placements by people wearing shoes made by that company.

    >>> result = build_placements(['Saucony', 'Asics', 'Asics', 'NB', 'Saucony', 'Nike', 'Asics', 'Adidas', 'Saucony', 'Asics'])
    >>> result == {'Saucony': [1, 5, 9], 'Asics': [2, 3, 7, 10], 'NB': [4], 'Nike': [6], 'Adidas': [8]}
    True
    """
    return {i:[j+1 for j,k in enumerate(shoes) if k == i] for i in set(shoes)}

if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)

这是产生的

Trying:
    result = build_placements(['Saucony', 'Asics', 'Asics', 'NB', 'Saucony', 'Nike', 'Asics', 'Adidas', 'Saucony', 'Asics'])
Expecting nothing
ok
Trying:
    result == {'Saucony': [1, 5, 9], 'Asics': [2, 3, 7, 10], 'NB': [4], 'Nike': [6], 'Adidas': [8]}
Expecting:
    True
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.build_placements
2 tests in 2 items.
2 passed and 0 failed.
Test passed.