Q: Gibt es eine Möglichkeit, Python, um mir eine Warnung zu geben, wenn es mehr als eine Definition der gleichen Funktion ist, in Konflikt usw.suchen python Warnung für eine mehrfach definierte Funktion
(ich gerade verschwendet wenig Zeit Änderungen an zwei verschiedenen Versionen der gleichen Funktion zu machen)
Ein kleines Beispiel widersprüchlicher Funktionsdefinitionen.
$> cat ./foo2.py
cat ./foo2.py
def foo():
print "1st definition of foo()"
def foo():
print "2nd definition of foo()"
foo()
Ausführen - Python verwendet die letzte Definition. (By the way, ist das offiziell definiert? Es ist nützlich Semantik, zB beim Erstellen von Funktionen on the fly in Strings und Auswerten von ihnen. Es ist nützlich in einem Interpreter. Aber es Masken unter bestimmten Umständen maskiert, daher mein Wunsch, eine optionale haben . Warnung)
$> python ./foo2.py
python ./foo2.py
2nd definition of foo()
"python -W all" nicht gibt eine Warnung aus:
$> python -W all ./foo2.py
python -W all ./foo2.py
2nd definition of foo()
auch nicht "Warnungen verwenden".
Für diese Angelegenheit tut python3 die gleiche wie die oben (obwohl python3 Pars um das Argument erfordert :-(zu drucken).
Pylint meldet den Fehler
E: 4, 0: function already defined line 2 (function-redefined)
aber ich habe die übliche Einwände gegen einzelne Lint-Tools, die jedem geläufig sein sollten, der mit der Programmiersprache vertraut ist (zB Lint ist laut; Lint ist optional, nicht immer ausgeführt; lint ist optional, wurde zB nicht automatisch mit python installiert und benötigt ich, um ein paar Hacks zu machen, um zu installieren (Homebrew Probleme?) - Ich gab fast auf, und wenn ich aufgegeben hätte, würde ich nicht haben Pylint hatte)
Deshalb, auch wenn tut Pylint den Fehler finden, frage ich nach wie vor.
Q: Gibt es eine Möglichkeit, Python selbst zu erhalten einen Fehler oder eine Warnung für mehrfach definierten Funktionen zu berichten?
===
Zum Vergleich und als Reaktion auf Leute, die sagen: „Warum würden Sie wollen, dass in einer dynamischen Sprache?“
Perl ist auch eine dynamische Sprache. Als Perl zum ersten Mal herauskam, gab es solche Warnungen nicht. Aber jetzt tut es das, weil die Leute gemerkt haben, dass solche Warnungen gut für die Codequalität sind.
Perl warnt standardmäßig nicht vor mehreren Definitionen, warnt jedoch mit -Wall oder verwendet eine Warnung.
$> cat foo2.pl
cat foo2.pl
sub foo { print "foo#1" }
sub foo { print "foo#2" }
foo()
$> perl -Wall ./foo2.pl
perl -Wall ./foo2.pl
Subroutine foo redefined at ./foo2.pl line 2.
foo
Nein, gibt es nicht; Python ist eine sehr dynamische Sprache, es gibt nichts, was Sie davon abhält, den Namen etwas anderem zuzuordnen (Funktion oder nicht). – jonrsharpe
Dies ist ein besonderes Beispiel für eine Warnung, die optional aktiviert werden könnte, wie in der allgemeineren Frage [do-python-have-a-use-strict- und-use-warnings-like-in-perl] (http: // : //stackoverflow.com/questions/13425715/does-python-have-a-use-strict-and-use-warnings-like-in-perl) –
Und da die Antwort auf diese Frage war * "nein" * , was hast du erwartet? – jonrsharpe