Получите KeyError, но ключ существует во вложенном словаре - PullRequest
0 голосов
/ 06 апреля 2020

При попытке обратиться к значению в моем словаре я получаю KeyError, однако ключ (NIO) находится в словаре.

При устранении неполадок я обнаружил, что

['NIO']
<class 'str'>

создает KeyError, но

NIO
<class 'str'>

запускает программу, как и ожидалось.

Я не до конца понимаю разницу в строках и не смог найти хорошего объяснения.

В чем разница в приведенных выше строках и как преобразовать первое во второе?

Пример ниже:

symbol = ['NIO']
holdings_data = {'BA': {'price': '122.720000', 'quantity': '1.00000000'}, 
'NIO': {'price': '2.440000', 'quantity': '2.00000000'}}


def trade_history(symbol, holdings_data):
    symbol = str(symbol)
    print(symbol)
    print(type(symbol))
    #symbol = 'NIO'
    #print(symbol)
    #print(type(symbol))
    quantity = (holdings_data[symbol].get('quantity'))
    print(quantity)

trade_history(symbol, holdings_data)

возвращает

KeyError: "['NIO']"

, но при добавлении

symbol = 'NIO'
print(symbol)
print(type(symbol))

возвращается

['NIO']
<class 'str'>
NIO
<class 'str'>
2.00000000

1 Ответ

0 голосов
/ 06 апреля 2020

Проблема в строке:

symbol = str(symbol)

Должно быть:

symbol = str(symbol[0])

Это происходит потому, что вы пытаетесь изменить список на строку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...