Как я могу распечатать что-нибудь, когда у меня есть 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.
Другие вопросы по тегам