【问题标题】:'str' object has no attribute 'get' when trying to check if string exists in a dictionary尝试检查字典中是否存在字符串时,“str”对象没有属性“get”
【发布时间】:2020-06-16 20:09:51
【问题描述】:

我有三本词典,每一本都是像电子游戏中一样的“库存”

playerInventory = {"arrow": 12, "gold coin": 42, "rope": 1, "torch": 6, "dagger": 1}
inv = {'gold coin': 42, 'rope': 1}
dragonLoot2 = {"gold coin": 3, "dagger": 1, "ruby": 1}

我正在尝试创建一个非常基本的函数来检查您输入的项目是否存在于您输入的另一个库存中,我的代码是

def checkItem(inventory, item):
    print("You have " + str(inventory.get(item, 0)) + " of " + str(item))

kolla_item = input("Item to check: ")
kolla_inventory = input("Inventory to check: ")

checkItem(kolla_inventory, kolla_item)

这给了我'str' object has no attribute 'get 定义checkItem 的错误。我已尝试删除str 并删除命令周围的任何括号以获取您拥有的所述项目的数量,但没有任何效果我仍然不断收到该错误。但是我注意到,如果我将项目作为字符串手动输入,并且像下面这样的字典,它就可以正常工作

checkItem(dragonLoot2, "ruby")

所以由于某种原因,项目输入在输入时不是字符串?将str( 放在kolla_item 输入提示周围也不会修复它。

【问题讨论】:

  • 你能添加整个错误跟踪吗?
  • 因为参数是一个字符串。你在做checkItem("dragonLoot2", "ruby")输入总是一个字符串。

标签: python get


【解决方案1】:

似乎您遇到的问题是您试图从用户输入一个字符串并检查该字符串是否与字典的名称匹配。

例如"dragonLoot2" 不等于 dragonLoot2,因为一个是字符串,一个是变量名。

要做到这一点,你必须创造条件:

playerInventory = {"arrow": 12, "gold coin": 42, "rope": 1, "torch": 6, "dagger": 1}
inv = {'gold coin': 42, 'rope': 1}
dragonLoot2 = {"gold coin": 3, "dagger": 1, "ruby": 1}

def checkItem(inventory, item):
    print("You have " + str(inventory.get(item, 0)) + " of " + str(item))

kolla_item = input("Item to check: ")
kolla_inventory = input("Inventory to check: ")

if kolla_inventory == "dragonLoot2":
    checkItem(dragonLoot2, kolla_item)
elif kolla_inventory == "inv":
    checkItem(inv, kolla_item)
elif kolla_inventory == "playerInventory":
    checkItem(playerInventory, kolla_item)

【讨论】:

    【解决方案2】:

    如果您运行此程序并输入金“硬币”,然后输入"playerInventory,",您还运行了函数 checkItem,inventory"playInventory"。然后,在函数中,你写inventory.get,它本质上是"playerInventory".get(),你不是一个合法的表达,因为.get()只适用于字典

    【讨论】:

      【解决方案3】:

      正如其他人指出的那样,是参数类型的问题。你的函数有签名:

      def checkItem(inventory:dict, item:str):
      

      因此,库存必须是 dict。每当您要求用户输入时,python 默认返回一个字符串。字符串没有方法get。你想做的更像是一个开关。像这样的:

      def select_dict(dictionary_name):
          if dictionary_name == 'playerInventory'
              return playerInventory
      

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-28
        • 1970-01-01
        • 2022-12-05
        相关资源
        最近更新 更多