Warum werden einige Python-Ausnahmen in Kleinbuchstaben geschrieben? [geschlossen]

8

In Python sind Ausnahmen Klassen und werden als solche eingeschlossen. Zum Beispiel : OSError.

Es gibt jedoch einige Ausnahmen, z. B. im Socket-Modul , die in Kleinbuchstaben angegeben sind. Zum Beispiel: socket.timeout, socket.error.

Warum ist das?

BadHeuristics
quelle
2
Ich bin mir nicht sicher, ob dies zu verantworten ist, aber es ist sehr interessant.
Jared Smith
2
Verschiedene Autoren? Keine etablierten Namenskonventionen?
Johnny Mopp
2
Die Frage könnte sich auf etwas Ähnliches wie "Warum sind einige Python-Funktionen camelCase?" Einige Bibliotheken haben einen leicht inkonsistenten Stil, der sich im Laufe der Zeit weiterentwickelt hat. Ich denke, PEP-8 spricht dazu und war ein Versuch, "alle auf die gleiche Seite zu bringen", was teilweise erfolgreich war.
Ggorlen
2
Beachten Sie, dass "Warum" -Fragen zum Sprachdesign hier im Allgemeinen als nicht thematisch betrachtet werden , da sie nicht "praktisch" sind - im Sinne von etwas, dessen Antwort es Ihnen ermöglichen würde, einen Fehler zu beheben oder auf andere Weise Ihre Vorgehensweise zu ändern der Programmierung. (Siehe die "praktischen, verantwortlichen" Kriterien im vierten Aufzählungspunkt von stackoverflow.com/help/on-topic , der in andere Bedingungen UND-verknüpft ist.)
Charles Duffy
1
Ich bin in diesem speziellen Fall nicht einverstanden, @CharlesDuffy. Wenn ich keine Erfahrung mit Python hätte, könnte ich denken, dass sie etwas Besonderes an sich haben, das bedeutet, dass ich mit ihnen auf eine bestimmte Weise umgehen sollte, oder dass sie sich auf eine andere Art und Weise geringfügig unterscheiden, die mich wahrscheinlich beißen würde. Ich denke, es ist vernünftig zu fragen, warum sie nicht wie die anderen sind.
Kirk Strauser

Antworten:

7

Laut den Dokumenten,

Ausnahme socket.error Ein veralteter Alias ​​von OSError.

In Version 3.3 geändert: Nach PEP 3151 wurde diese Klasse zu einem Alias ​​von OSError gemacht.

PEP 3151 sagt

Während Standardausnahmetypen im Root-Namespace gespeichert sind, unterscheiden sie sich visuell durch die Tatsache, dass sie die CamelCase-Konvention verwenden, während fast alle anderen Buildins Kleinbuchstaben verwenden (außer True, False, None, Ellipsis und NotImplemented).

Vishnudev
quelle
Aber warum nicht auch CamelCase-Ausnahmen ohne Root-Namespace machen? Wenn Sie sie in Kleinbuchstaben schreiben, wird die Verschmutzung durch Namespaces nicht behoben.
BadHeuristics
1
So will es PSF haben. Wenn Sie Einwände haben, sprechen Sie diese im Abschnitt "Themen" von PEP
Vishnudev
@Vishnudev Die PSF möchte nicht, dass die Socket-Ausnahmen in Kleinbuchstaben geschrieben werden. Es sind historische Artefakte, die übrig bleiben, um den Code nicht zu beschädigen.
Terry Jan Reedy
Es ist vielleicht so, dass es in PEP-Artikeln nach 3151 angegeben wurde, aber der PEP 3151-Artikel schlägt das Gegenteil vor und besagt, "während fast alle anderen Buildins Kleinbuchstaben verwenden", was bedeutet, dass Builtins Kleinbuchstaben haben sollten. Ich werde meinen Kommentar löschen, wenn Sie der Meinung sind, dass er nicht angemessen ist. @TerryJanReedy
Vishnudev
@Vishnudev 'Andere integrierte Funktionen verwenden die Benennung in Kleinbuchstaben' (in python.org/dev/peps/pep-3151/#possible-objections ) bezieht sich auf integrierte Klassen wie int, float, complex, tuple, set, list, dict und einige andere. Alle Ausnahmen in Builtins , die unter docs.python.org/3/library/exceptions.html#built-in-exceptions aufgeführt sind , sind CamelCase. Zusätzliche Ausnahmen, die in anderen Modulen definiert sind, sollten diesem Muster folgen, sofern keine guten Gründe vorliegen. Sockets datieren darauf, wann Ausnahmen eher Zeichenfolgen als Klassen und Klasseninstanzen waren. (Das Löschen würde meine Antworten weniger sinnvoll machen.)
Terry Jan Reedy