EAFP gegen LBYL
Ich verstehe Ihr Dilemma, aber Python ist kein PHP und der Codierungsstil, der als einfacher um Vergebung zu bitten als um Erlaubnis (oder kurz EAFP ) bekannt ist, ist ein gängiger Codierungsstil in Python .
Siehe Quelle (aus der Dokumentation ):
EAFP - Einfacher um Vergebung zu bitten als um Erlaubnis. Dieser übliche Python-Codierungsstil setzt die Existenz gültiger Schlüssel oder Attribute voraus und fängt Ausnahmen ab, wenn sich die Annahme als falsch herausstellt. Dieser saubere und schnelle Stil zeichnet sich durch das Vorhandensein vieler Try-and-Except-Aussagen aus. Die Technik steht im Gegensatz zum LBYL-Stil, der vielen anderen Sprachen wie C gemeinsam ist.
Grundsätzlich ist die Verwendung von try-catch-Anweisungen hier also nicht das letzte Mittel. es ist eine übliche Praxis .
"Arrays" in Python
PHP hat assoziative und nicht assoziative Arrays, Python hat Listen, Tupel und Wörterbücher. Listen ähneln nicht assoziativen PHP-Arrays, Wörterbücher ähneln assoziativen PHP-Arrays.
Wenn Sie überprüfen möchten, ob "Schlüssel" in "Array" vorhanden ist, müssen Sie zuerst angeben, um welchen Typ in Python es sich handelt, da sie unterschiedliche Fehler auslösen, wenn der "Schlüssel" nicht vorhanden ist:
>>> l = [1,2,3]
>>> l[4]
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
l[4]
IndexError: list index out of range
>>> d = {0: '1', 1: '2', 2: '3'}
>>> d[4]
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
d[4]
KeyError: 4
Und wenn Sie den EAFP-Codierungsstil verwenden, sollten Sie diese Fehler nur entsprechend abfangen.
LBYL-Codierungsstil - Überprüfung der Existenz von Indizes
Wenn Sie darauf bestehen, den LBYL-Ansatz zu verwenden, sind dies Lösungen für Sie:
Für Listen überprüfen Sie einfach die Länge und wenn possible_index < len(your_list), dann your_list[possible_index]existiert, sonst nicht:
>>> your_list = [0, 1, 2, 3]
>>> 1 < len(your_list)
True
>>> 4 < len(your_list)
False
Für Wörterbücher können Sie ein inSchlüsselwort verwenden, und wenn possible_index in your_dict, dann your_dict[possible_index]existiert es, sonst nicht:
>>> your_dict = {0: 0, 1: 1, 2: 2, 3: 3}
>>> 1 in your_dict
True
>>> 4 in your_dict
False
Hat es geholfen?