Le jour viendra-t-il où Python pourra avoir une expression except?

Expressions et déclarations

De nombreux langages de programmation, y compris Python, font une distinction entre les instructions et les expressions. Je vais donner les détails aux autres (car je ne connais pas très bien la langue), mais très grossièrement.

On peut le dire. Si vous n'avez pas envie d'écrire votre code court, vous pouvez faire l'un ou l'autre, mais pour l'écrire court, il vaut mieux avoir autant d'expressions que possible, en en poussant autant dans une seule expression. D'un autre côté, si vous faites de tout une expression, vous pouvez facilement écrire du code compliqué et étrange, et je déteste ça dans certaines langues. Python est un langage qui ne l'aime pas, par exemple les affectations sont des instructions plutôt que des expressions. Vous ne pouvez donc pas écrire de code comme ʻa = (b = 1) + (c = 2) . Il n'y a pas d'expression telle que ʻa = i ++ . Les fonctions peuvent également être créées avec des expressions lambda, mais les instructions ne peuvent pas être écrites dans des expressions lambda, et seules les fonctions qui peuvent être exprimées avec une seule expression peuvent être créées. L'idée est que si vous voulez créer une fonction aussi compliquée, définissez-la correctement avec def hogehoge ():.

Pourquoi vous voulez une expression except

Il y a beaucoup de. Environ 2 cas.

  1. Reportez-vous au dictionnaire

python


try:
    process(dic[key])
except KeyError:
    process(None)
  1. Conversion int de chaîne de caractères

python


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

La référence de dictionnaire de 1 peut être réécrite avec if.

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

Il peut également être écrit comme une expression à l'aide de l'opérateur ternaire. process(dic[key] if key in dic else None) Si vous souhaitez effectuer une conversion int de la chaîne de caractères de 2, elle peut être réécrite avec if. process(int(s) if s[0] in '-0123456789' and all(c in '0123456789' for c in s) else 0) Mais faites-vous cela? Je me sens. Ce serait encore plus ennuyeux si c'était un float plutôt qu'un int.

Réaction de PEP 463 et Guido

Par conséquent, un PEP a été proposé en mars 2014 pour ajouter une expression d'exception. http://legacy.python.org/dev/peps/pep-0463/

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

Ouaip. C'est facile à comprendre. Avec cela, conversion int des chaînes de caractères process(int(s) except IndexError: 0) Peut être écrit simplement.

Cependant, Guido, le créateur de Python, a déclaré qu'à partir de mars 2014, le PEP était bien étudié et la grammaire bien développée, mais la proposition elle-même serait rejetée. 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.

(Traduction diverse) Mais ce avec quoi je ne suis pas d'accord, c'est le motif et la justification. Par exemple, je ne pense pas que dict.get était inutile s'il y avait une expression except. Je ne suis pas non plus d'accord avec l'idée que EAFP (\ * 1) est meilleur que LBYL (\ * 2) ou est "généralement recommandé" en Python.

(\ * 1) Il est plus facile de demander pardon que la permission (il est plus facile de demander la permission que d'obtenir la permission). En d'autres termes, comme la syntaxe try-except, si vous essayez et échouez, prenez une autre méthode. (\ * 2) Regardez avant de sauter: La canne qui ne tombe pas, c'est-à-dire, assurez-vous qu'elle n'échoue pas à l'avance avant de le faire.

Je pense que ce serait pratique de l'avoir. Après tout, n'est-il pas adopté?

Recommended Posts

Le jour viendra-t-il où Python pourra avoir une expression except?
Vous serez ingénieur dans 100 jours - Jour 29 - Python - Bases du langage Python 5
Vous serez ingénieur dans 100 jours - Jour 33 - Python - Bases du langage Python 8
Vous serez ingénieur dans 100 jours --Jour 26 --Python --Basiques du langage Python 3
Vous devenez ingénieur en 100 jours - Jour 35 - Python - Ce que vous pouvez faire avec Python
Vous serez ingénieur dans 100 jours --Jour 32 --Python --Basiques du langage Python 7
Vous serez ingénieur dans 100 jours --Jour 28 --Python --Les bases du langage Python 4
Vous serez ingénieur dans 100 jours - Jour 27 - Python - Exercice Python 1
Vous serez ingénieur dans 100 jours - Jour 34 - Python - Exercice Python 3
Vous serez ingénieur dans 100 jours - Jour 31 - Python - Python Exercice 2
J'ai eu un AttributeError en me moquant de la méthode ouverte en python
Assurez-vous que python peut convertir / convertir une chaîne de caractères en int
Vérifiez le comportement lors de l'attribution de Python
Demandez à python de lire la sortie de la commande
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Vous serez ingénieur dans 100 jours ――Jour 24 ―― Python ―― Bases du langage Python 1
Fonction Eval () qui calcule une chaîne de caractères comme expression en python
Vous serez ingénieur dans 100 jours ――Jour 30 ―― Python ―― Bases du langage Python 6
Vous serez ingénieur dans 100 jours ――Jour 25 ―― Python ―― Bases du langage Python 2
[Python3] Code qui peut être utilisé lorsque vous souhaitez modifier l'extension d'une image à la fois