[PYTHON] Gegenmaßnahmen für Schlüsselfehler des Wörterbuchtyps

Ein KeyError wird generiert, wenn versucht wird, auf einen Schlüssel zuzugreifen, der nicht im Wörterbuch vorhanden ist.

Die Gegenmaßnahmen dagegen werden nachfolgend beschrieben.

Überprüfen Sie vorab, ob der Schlüssel vorhanden ist

>>> pythons = {'Chapman': 'Graham', 'Cleese': 'John',
... Jones': 'Terry', 'Palin': 'Michael'}
>>> 'Marx' in pythons
False

Verwenden Sie die Funktion get ()

>>> pythons.get('Cleese')
'John'

Wenn der Schlüssel nicht vorhanden ist, wird der angegebene Optionswert zurückgegeben.

>>> pythons.get('Marx', 'Not a Python')
'Not a Python'

Wenn der Schlüssel nicht vorhanden ist, wird None zurückgegeben, wenn keine Option angegeben ist.

>>> ret = pythons.get('Marx')
>>> ret is None
True

Verwenden Sie setdefault ()

Befindet sich der Schlüssel nicht im Wörterbuch, wird er mit dem im zweiten Argument angegebenen Wert zum Wörterbuch hinzugefügt.

>>> periodic_table = {'Hydrogen', 1, 'Helium': 2}
>>> print(periodic_table)
{'Helium': 2, 'Hydrogen': 1}
>>>

carbon = periodic_table.setdefault ('Carbon', 12) # Hinzugefügt, da das Wörterbuch kein 'Carbon' enthält 12

periodic_table {'Helium': 2, 'Carbon': 12, 'Hydrogen': 1}

Befindet sich der Schlüssel bereits im Wörterbuch, wird der ursprüngliche Wert zurückgegeben und das Wörterbuch überhaupt nicht geändert.

>>> helium = periodic_table.setdefault('Helium', 947)
>>> helium
>>> periodic_table
{'Helium': 2, 'Carbon': 12, 'Hydrogen': 1}

Verwenden Sie defaultdict ()

defaultdict () legt den Standardwert beim Erstellen eines Wörterbuchs im Voraus fest. Geben Sie eine Funktion im Argument von defaultdict () an.

from collections import defaultdict
periodic_table = defaultdict(int)

Wenn Sie dann auf einen nicht vorhandenen Schlüssel zugreifen, wird der Wert von "int ()" (= 0) festgelegt.

>>> periodic_table['Hydrogen'] = 1
>>> periodic_table['Lead']
0
>>> periodic_table
defaultdict(<class 'int'>, {'Lead': 0, 'Hydrogen': 1})

Die an defaultdict () übergebene Funktion kann Ihre eigene Definition sein. In diesem Fall wird der Wert von "no_idea ()" gesetzt.

>>> from collections import defaultdict
>>>
>>> def no_idea():
... return 'Huh?'
...
>>> bestiary = defaultdict(no_idea)
>>> bestiary['A'] = 'Abominable Snowman'
>>> bestiary['B'] = 'Basilisk'
>>> bestiary['A']
'Adominable Snowman'
>>> bestiary['B']
'Basilisk'
>>> bestiary['C']
'Huh?'

Sie können Lambda verwenden, um eine Standarderstellungsfunktion im Aufruf defaultdict () zu definieren.

>>> bestiary = defaultdict(lambda: 'Huh?')
>>> bestiary = ['E']
'Huh?'

Dieser Code wurde aus den folgenden Dokumenten entlehnt (teilweise geändert).

Nachtrag

Sie haben in den Kommentaren darauf hingewiesen. Sie können auch die Ausnahme abfangen.

try:
	result = cache[x]
except KeyError:
	result = 'blah blah blah...'
	cache[x] = result

Recommended Posts

Gegenmaßnahmen für Schlüsselfehler des Wörterbuchtyps
Wörterbuchtyp 2
Wörterbuchtyp 1
Wörterbuchschlüsselfehler → Mit Schlüssel in dicionary beheben
[Fehlergegenmaßnahmen] Fehlerbehandlung bei der Installation von Django-Heroku
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 1
Geben Sie mit python-argparse Optionen für Wörterbuchtypen an
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 2