Wird der Tag kommen, an dem Python einen Ausnahme-Ausdruck haben kann?

Ausdrücke und Aussagen

Viele Programmiersprachen, einschließlich Python, unterscheiden zwischen Anweisungen und Ausdrücken. Ich werde die Details an andere weitergeben (weil ich mit der Sprache nicht so vertraut bin), aber sehr grob.

Es kann gesagt werden. Wenn Sie nicht den Wunsch haben, Ihren Code kurz zu schreiben, spielt es keine Rolle, welchen Sie verwenden, aber um ihn kurz zu schreiben, ist es besser, so viele Ausdrücke wie möglich zu haben, da Sie so viele Ausdrücke in einen Ausdruck einfügen können. Wenn Sie dagegen alles zu einem Ausdruck machen, können Sie leicht komplizierten und seltsamen Code schreiben, und ich hasse ihn in einigen Sprachen. Python ist eine Sprache, die es nicht mag. Zuweisungen sind beispielsweise eher Anweisungen als Ausdrücke. Sie können also keinen Code wie "a = (b = 1) + (c = 2)" schreiben. Es gibt keinen Ausdruck wie "a = i ++". Funktionen können auch mit Lambda-Ausdrücken erstellt werden, aber Anweisungen können nicht in Lambda-Ausdrücken geschrieben werden, und es können nur Funktionen erstellt werden, die mit einem einzelnen Ausdruck ausgedrückt werden können. Die Idee ist, wenn Sie eine so komplizierte Funktion erstellen möchten, definieren Sie sie richtig mit def hogehoge ():.

Warum möchten Sie einen Ausnahmeausdruck?

Es gibt viele. Über 2 Fälle.

  1. Siehe Wörterbuch

python


try:
    process(dic[key])
except KeyError:
    process(None)
  1. Int-Konvertierung der Zeichenfolge

python


try:
    process(int(s))
except ValueError:
    process(0)

Die Wörterbuchreferenz von 1 kann mit if umgeschrieben werden.

if key in dic:
    process(dic[key])
else:
    process(None)

Es kann auch als Ausdruck mit dem ternären Operator geschrieben werden. process(dic[key] if key in dic else None) Wenn Sie die Zeichenfolge 2 int konvertieren möchten, können Sie sie mit if umschreiben. process(int(s) if s[0] in '-0123456789' and all(c in '0123456789' for c in s) else 0) Aber machst du das? Ich fühle mich. Es wäre noch ärgerlicher, wenn es float statt int wäre.

Reaktion von PEP 463 und Guido

Daher wurde im März 2014 ein PEP vorgeschlagen, um einen Ausnahmeausdruck hinzuzufügen. http://legacy.python.org/dev/peps/pep-0463/

lst = [1, 2]
value = (lst[2] except IndexError: "No value")

Jep. Das ist leicht zu verstehen. Damit int Konvertierung von Zeichenketten process(int(s) except IndexError: 0) Kann einfach geschrieben werden.

Guido, der Schöpfer von Python, sagte jedoch, dass das PEP ab März 2014 gut studiert und die Grammatik gut entwickelt war, aber der Vorschlag selbst würde abgelehnt. https://mail.python.org/pipermail/python-dev/2014-March/133118.html

But the thing I can't get behind are the motivation and rationale. I don't think that e.g. dict.get() would be unnecessary once we have except expressions, and I disagree with the position that EAFP is better than LBYL, or "generally recommended" by Python.

(Sonstige Übersetzung) Was ich jedoch nicht zustimme, ist das Motiv und die Begründung. Zum Beispiel glaube ich nicht, dass dict.get unnötig war, wenn es einen Ausnahmeausdruck gab. Ich bin auch nicht einverstanden mit der Idee, dass EAFP (\ * 1) besser als LBYL (\ * 2) ist oder in Python "allgemein empfohlen" wird.

(\ * 1) Es ist einfacher, um Vergebung zu bitten als um Erlaubnis (Es ist einfacher, um Erlaubnis zu bitten, als um Erlaubnis zu bitten). Mit anderen Worten, wie bei der Try-Except-Syntax, verwenden Sie eine andere Methode, wenn Sie versuchen, einen Fehler zu machen. (\ * 2) Schauen Sie, bevor Sie springen: Der Stock, der nicht fällt, das heißt, stellen Sie sicher, dass er nicht im Voraus versagt, bevor Sie es tun.

Ich denke, es wäre bequem, es zu haben. Ist es nicht adoptiert?

Recommended Posts

Wird der Tag kommen, an dem Python einen Ausnahme-Ausdruck haben kann?
Sie werden in 100 Tagen Ingenieur - 29. Tag - Python - Grundlagen der Python-Sprache 5
Sie werden in 100 Tagen Ingenieur - Tag 33 - Python - Grundlagen der Python-Sprache 8
Sie werden in 100 Tagen Ingenieur - 26. Tag - Python - Grundlagen der Python-Sprache 3
Sie werden in 100 Tagen Ingenieur - Tag 35 - Python - Was Sie mit Python tun können
Sie werden in 100 Tagen Ingenieur - Tag 32 - Python - Grundlagen der Python-Sprache 7
Sie werden in 100 Tagen Ingenieur - 28. Tag - Python - Grundlagen der Python-Sprache 4
Sie werden in 100 Tagen Ingenieur - 27. Tag - Python - Python-Übung 1
Sie werden in 100 Tagen Ingenieur - Tag 34 - Python - Python-Übung 3
Sie werden in 100 Tagen Ingenieur - 31. Tag - Python - Python-Übung 2
Ich habe einen AttributeError erhalten, als ich die offene Methode in Python verspottet habe
Stellen Sie sicher, dass Python eine Zeichenfolge in int konvertieren / konvertieren kann
Überprüfen Sie das Verhalten beim Zuweisen von Python
Lassen Sie Python die Befehlsausgabe lesen
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
Sie werden in 100 Tagen Ingenieur. ――Tag 24 ―― Python ―― Grundlagen der Python-Sprache 1
Die eval () -Funktion, die eine Zeichenfolge als Ausdruck in Python berechnet
Sie werden in 100 Tagen Ingenieur. ――Tag 30 ―― Python ―― Grundlagen der Python-Sprache 6
Sie werden in 100 Tagen Ingenieur. ――Tag 25 ―― Python ―― Grundlagen der Python-Sprache 2
[Python3] Code, der verwendet werden kann, wenn Sie die Erweiterung eines Bildes sofort ändern möchten