Как я могу проверить ошибку в условии «если», чтобы принять решение? - PullRequest
0 голосов
/ 18 июня 2020

Предположим, у меня есть словарь:

myList ={1:'One', 2:'two', 3:'three'}

И мой код выглядит так:

if myList[4]:
   last = myList[4]
else:
   last = myList[3]

Это возвращает KeyError.

Я знаю о myList.get(4,'Something'). Но я ищу что-то другое.

Есть что-то вроде:

if 'KeyError' myList[4]:
   last = myList[3]
else:
   last = myList[4]

Здесь объясняется такой метод https://realpython.com/python-keyerror/. Я попытался. Но он по-прежнему вызывает KeyError, когда myList[4] не существует. Может ли кто-нибудь помочь мне найти то, что мне здесь не хватает?

myList={1:'one', 2:'two', 3:'three'}

if 'keyError' in myList[4]:
    last = myList['3']
else:
    last = myList['4']

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4

Метод try...except мне не подходит. это делает мой код длиннее и медленнее.

Ответы [ 4 ]

1 голос
/ 18 июня 2020

Вы можете поймать это с помощью блока try except:

myList = {1:'one', 2:'two', 3:'three'}

try:
    last = myList[len(myList)]
except KeyError as e:
    print('KeyError: ', e)
0 голосов
/ 18 июня 2020

Самый простой безопасный способ, если вы не хотите использовать блок try except (что рекомендуется передовой практикой), - это просто использовать это:

last = myList[len(myList)]
0 голосов
/ 18 июня 2020

Вы можете заключить его в оператор try и обработать ошибку:

try:
    last = myList[4]
except KeyError:
    last = myList[3]
0 голосов
/ 18 июня 2020

Вы можете получить список ключей словаря с помощью myList.keys(), чтобы вы могли сделать это:

if 4 in myList.keys():
    last = myList[4]
else:
    last = myList[3]

В зависимости от того, что вы делаете, вам также может быть интересно узнать, что вы можете получить длина словаря с использованием len(myList), поэтому то, что вы делаете (с увеличивающимися ключами, начинающимися с 1), также можно было бы сделать в более общем виде следующим образом:

last = myList[len(myList)]

Я думаю, вы должны переименовать myList на myDict. Это не список. Это «словарь», также известный как dict.

Наконец, старайтесь избегать использования блоков try-except там, где это возможно. Если вы собираетесь использовать try-except, лучше всего отловить конкретную ошибку (например, KeyError, как вы упомянули). Чтобы узнать, как правильно отловить KeyError, см. Ответ @ jeanpierre-fisher (услужливо отредактировано @ ann-zen).

...