Was bedeutet "Verwenden des EAFP-Prinzips" in Python? Können Sie Beispiele nennen?
python
principles
Unbezahlte Orakel
quelle
quelle
Antworten:
Aus dem Glossar :
Ein Beispiel wäre ein Versuch, auf einen Wörterbuchschlüssel zuzugreifen.
EAFP:
LBYL:
Die LBYL-Version muss den Schlüssel im Wörterbuch zweimal durchsuchen und wird möglicherweise auch als etwas weniger lesbar angesehen.
quelle
x
wenn der Schlüssel nicht vorhanden ist:x = mydict.get('key')
Wird zurückgegeben,None
wenn'key'
nicht inmy_dict
; Sie können dies auch tun.get('key', <something>)
, und dann wird x das zugewiesen, wenn der Schlüssel nicht im Wörterbuch enthalten ist.dict.setdefault()
undcollections.defaultdict
sind nette Dinge, um auch überschüssigen Code zu vermeiden.except KeyError
so gut wieAttributeError
einfach, aber einige der schlimmsten Beispiele. So oft steckte ich beim Debuggen fest, weilexcept AttributeError
es an einer falschen Stelle platziert wurde, was dazu führte, dass falsche Attributfehler aufgefangen wurden, die tiefer in der Kette auftauchten. Bessere Beispiele, denke ich, sind :try: open() ... except: IOError
. Odertry: parseLine() ... except ParseError
Ich werde versuchen, es mit einem anderen Beispiel zu erklären.
Hier versuchen wir, auf die Datei zuzugreifen und den Inhalt in der Konsole zu drucken.
LBYL - Schauen Sie, bevor Sie springen:
Wir möchten möglicherweise überprüfen, ob wir auf die Datei zugreifen können, und wenn wir können, öffnen wir sie und drucken den Inhalt. Wenn wir nicht auf die Datei zugreifen können, treffen wir das
else
Teil. Der Grund, warum dies eine Rennbedingung ist, ist, dass wir zuerst eine Zugangsprüfung durchführen. Bis wir es erreichenwith open(my_file) as f:
, können wir möglicherweise aufgrund einiger Berechtigungsprobleme nicht mehr darauf zugreifen (z. B. erhält ein anderer Prozess eine exklusive Dateisperre). Dieser Code wird wahrscheinlich einen Fehler auslösen und wir können diesen Fehler nicht abfangen, da wir dachten, wir könnten auf die Datei zugreifen.EAFP - Einfacher um Vergebung bitten als um Erlaubnis:
In diesem Beispiel versuchen wir nur, die Datei zu öffnen. Wenn wir sie nicht öffnen können, wird eine Datei ausgegeben
IOError
. Wenn wir können, öffnen wir die Datei und drucken den Inhalt. Anstatt etwas zu fragen , versuchen wir es zu tun. Wenn es funktioniert, großartig! Wenn dies nicht der Fall ist, erfassen wir den Fehler und behandeln ihn.quelle
Ich nenne es "optimistische Programmierung". Die Idee ist, dass die meisten Leute das Richtige tun und es nur wenige Fehler geben sollte. Codieren Sie also zuerst, damit das "Richtige" passiert, und fangen Sie dann die Fehler ab, wenn dies nicht der Fall ist.
Ich habe das Gefühl, wenn ein Benutzer Fehler macht, sollte er derjenige sein, der unter den zeitlichen Konsequenzen leidet. Menschen, die das Werkzeug richtig einsetzen, werden durchgeschleudert.
quelle