Как я могу распечатать что-нибудь, когда у меня есть KeyError для моего словаря в Python?
Итак, у меня есть код для моего словаря:
def get_rooms_for(dict1, num):
try:
for x in dict1:
if x == num:
print(dict1[x])
except KeyError:
print (num,"is not available.")
И мой тест
get_rooms_for({'CS101':3004, 'CS102':4501, 'CS103':6755,'NT110':1244, 'CM241':1411}, 'CS999')
И я ожидаю, что мой результат - распечатать параметр 'num' со строкой
CS999 is not available.
Но когда я помещаю это, это возвращает пустое. Что я должен сделать, если я хочу выбрать KeyError в словаре, используя код исключения??
4 ответа
Когда вы вводите try
Зацикливаясь, вы перебираете все ключи в словаре. CS999
не является ключом в словаре, поэтому вы никогда не пытаетесь получить к нему доступ. Таким образом, вы никогда не ударил KeyError
и except
пункт никогда не достигается.
То, что вы хотите сделать, больше похоже на это:
def get_rooms_for(dict1, num):
if num in dict1:
print(dict1[num])
else:
print("{} is not available".format(num))
Но у Python уже есть метод для этого: get
dict1.get(num, "{} is not available".format(num))
Который вернет значение, сопоставленное с num
если это в словаре, и "{} is not available".format(num)
если это не так.
Попробуй это:
def get_rooms_for(dict1, num):
try:
for x in dict1:
if dict1[num] == x:
print "It will print particular key's {0} value if its exists or It will generate keyerror".format(dict1[num])
print(dict1[x])
except KeyError:
print (num,"is not available.")
Выход:
('CS999', 'is not available.')
Попробуй это:
def get_rooms_for(dict1, num):
try:
print(dict1[num])
except KeyError:
print (num,"is not available.")
Вы также можете попробовать без try
а также exception
:
def get_rooms_for(dict1, num):
if dict1.has_key(str(num)): # or str(num) in dict1
print "Key available"
else:
print num,"is not available."
get_rooms_for({'CS101':3004, 'CS102':4501, 'CS103':6755,'NT110':1244, 'CM241':1411}, 'CS999')
выход:
CS999 is not available.