gpt4 book ai didi

python - 如何阻止值返回 'None' ?

转载 作者:行者123 更新时间:2023-11-28 22:21:11 26 4
gpt4 key购买 nike

我正在尝试做我正在学习 python 的书中的一个练习项目,但我被困在练习的第二部分,我应该编写一个代码来将列表添加到字典中。

为此,我尝试编写以下代码:

 def addToInventory(inventory, addedItems):
for a in addedItems:
if a not in inventory:
inventory.setdefault(a, 1)

inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)

但是,在最后一个 for 循环之后,库存将返回 none,因为它已到达列表的末尾,但这将导致 inv 为 None 并返回错误。

我在想,我可以在返回值为 none 时停止代码,我尝试编写一个 elif 语句,但它不起作用。

有什么办法吗?

P.S:即使很明显请不要发布上面的完整代码,我想自己做,我只是在寻找这个问题的答案:)。

最佳答案

您的 inv 设置为 None 因为 在 python 中所有不显式 return 值的函数都隐式 return无

您定义addToInventory 的方式,它会隐式修改inv(当心这种副作用,有时这真的不是您想要或期望的)。

仅用函数调用替换 inv = addToInventory(inv, dragonLoot) 的替代方法是使 addToInventory 显式返回库存。您可以决定喜欢哪种风格。

修复:

我知道您要求不要提供完整的代码解决方案,但根据您的评论,这是我能够足够清楚地解释它的唯一方式。正如我们在评论中所讨论的,如果其余代码由练习的框架提供,则您需要添加显式的 return。然而,重要的是你把那句话放在哪里。在 python 中,空格很重要。如果将返回与 inventory.setdefault 放在一起,它将在循环的第一次迭代期间执行。要让它在循环中运行然后返回,return 需要与 for 处于相同的缩进级别:

def addToInventory(inventory, addedItems):
for a in addedItems:
if a not in inventory:
inventory.setdefault(a, 1)
return inventory #<<<<<<< IN LINE WITH THE FOR

关于python - 如何阻止值返回 'None' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com