Ich habe eine Funktion, die von sich aus gut funktioniert, aberlöst einen Schlüsselfehler aus, wenn ich versuche, ihn in einer anderen Funktion zu verwenden. Anstatt zu versuchen, den größeren Kontext zu erklären, dachte ich, es wäre einfacher, einfach den zu ändern del hand [Brief]Hier wird der Fehler ausgelöst. In einigen Fällen könnte ich einfach hand [letter] in hand.get (letter, None) ändern, aber ich kann dies nicht mit dem del-Operator verwenden, es wird ein Fehler ausgegeben. Irgendwelche Ideen?
hand = {"r": 2, "a": 3, "p": 2, "e": 1, "t": 1, "u":1}
word = "rapture"
def update_hand(hand, word):
"""This function loops through letters, and if the letter is in the
hand, it reduces the corresponding int value by one, until there is
no longer that letter in the hand, then it deletes the key,value pair
all together"""
letters = set(word)
for letter in letters:
if letter in hand.keys():
hand[letter] = hand[letter]-1
if hand[letter] <= 0:
del hand[letter]
return hand
Antworten:
5 für die Antwort № 1Benutzen .pop
Wenn der Schlüssel also nicht vorhanden ist, wird kein Fehler ausgegeben, wenn Sie beispielsweise eine Standardeinstellung verwenden None
:
hand.pop(letter, None)
# ^ pops None when the key letter does not exist
Da Sie bereits eine Überprüfung auf das Vorhandensein desselben Schlüssels in einem Ihrer Schlüssel haben if
Bedingungen können Sie einfach tun:
for letter in letters:
if letter in hand: # same as letter in hand.keys()
hand[letter] = hand[letter] - 1
if hand[letter] <= 0:
hand.pop(letter, None) # del hand[letter] should not throw errors in this case
0 für die Antwort № 2
Wenn Ihre Funktion von sich aus "gut funktioniert", aber beim Aufruf von einer anderen Funktion ausgelöst wird, ist es das allererste, was Sie tun müssen, um dies herauszufinden Warum Sie haben ein Problem im zweiten Fall. Sonst ist es ein kanonisches Beispiel für zufällige Programmierung - von denen wir alle wissen, dass sie langfristig nie funktionieren.
Jetzt gibt es einen offensichtlichen Grund für a KeyError
im Code Ihrer Funktion, was nicht von irgendetwas anderem abhängt, was die Funktion eingibt: Sie versuchen, einen Schlüssel zu löschen, ohne vorher zu überprüfen, ob er existiert (das if hand[letter] <= 0:
Aussage). Übergeben Sie ein leeres Diktat für die hand
param und Sie werden herausfinden, welche Funktion dies tut nicht "funktioniert gut für sich".