Fehler vor Ausführung finden
Hallo Leute, ich habe hier seit vielen Jahren einen Raspberry PI als Heizungsgregler eingesetzt. Alles ist in Python umgesetzt. Was mich nervt, ist, dass bestimmte Programmierfehler durch Python erst dann entdeckt werden, wenn die Programmausführung diesen Codeteil durchläuft. Das passiert teilweise aber extrem selten oder jahrelang auch mal nicht. Heute wieder einmal einen Fehler entdeckt, wo ich von "self.State" gelesen habe, statt von "State". "self.State" gab es gar nicht, wird nirgends angelegt und nie verwendet. Das war einfach falsch runtergeschrieben. Offenbar analysiert Python den Code vor Ausführung nicht tief genug, um sowas zu entdecken. Gibt es eine einfache Möglichkeit, den Python Code dahingehend tiefer analysieren zu lassen? Jeder C-Compiler bekommt sowas ja auch hin. Ich nutze Python bisher nur auf dem Raspberry PI ohne Entwicklungsumgebung. Code wird per Editor geschrieben, ausgeführt dann direkt in der Konsole. Michael
Type Annotations in Python 3 könnten einiges in die Richtung abfangen. Dabei muss man aber einiges an Arbeit reinstecken, wenn die Codebasis groß ist. Man kann diese Annotations aber auch aus laufendem Code erzeugen (siehe MonkeyType), und sollte die dann aber auch manuell prüfen und ggf. korrigieren. Manche verbreiteten Typen sind aber nur umständlich, wenn überhaupt, zu beschreiben, z.B. ein Äquivalent zu JSON... Gruß, Dinu -- Sent on the move. Von unterwegs gesendet.
Am 27.01.2019 um 18:57 schrieb Michael S. <michaely@bigfoot.de>:
Hallo Leute, ich habe hier seit vielen Jahren einen Raspberry PI als Heizungsgregler eingesetzt. Alles ist in Python umgesetzt. Was mich nervt, ist, dass bestimmte Programmierfehler durch Python erst dann entdeckt werden, wenn die Programmausführung diesen Codeteil durchläuft. Das passiert teilweise aber extrem selten oder jahrelang auch mal nicht. Heute wieder einmal einen Fehler entdeckt, wo ich von "self.State" gelesen habe, statt von "State". "self.State" gab es gar nicht, wird nirgends angelegt und nie verwendet. Das war einfach falsch runtergeschrieben. Offenbar analysiert Python den Code vor Ausführung nicht tief genug, um sowas zu entdecken.
Gibt es eine einfache Möglichkeit, den Python Code dahingehend tiefer analysieren zu lassen? Jeder C-Compiler bekommt sowas ja auch hin.
Ich nutze Python bisher nur auf dem Raspberry PI ohne Entwicklungsumgebung. Code wird per Editor geschrieben, ausgeführt dann direkt in der Konsole.
Michael _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
Am 27.01.2019 um 18:57 schrieb Michael S. <michaely@bigfoot.de>:
Hallo Leute, ich habe hier seit vielen Jahren einen Raspberry PI als Heizungsgregler eingesetzt. Alles ist in Python umgesetzt. Was mich nervt, ist, dass bestimmte Programmierfehler durch Python erst dann entdeckt werden, wenn die Programmausführung diesen Codeteil durchläuft. Das passiert teilweise aber extrem selten oder jahrelang auch mal nicht. Heute wieder einmal einen Fehler entdeckt, wo ich von "self.State" gelesen habe, statt von "State". "self.State" gab es gar nicht, wird nirgends angelegt und nie verwendet. Das war einfach falsch runtergeschrieben. Offenbar analysiert Python den Code vor Ausführung nicht tief genug, um sowas zu entdecken.
Gibt es eine einfache Möglichkeit, den Python Code dahingehend tiefer analysieren zu lassen? Jeder C-Compiler bekommt sowas ja auch hin.
Eine grosse Hilfe ist ein guter Editor mit Python und pylint Unterstützung. Z.B. vs code von Microsoft (opensource) Der hätte Dir bereits beim Schreiben des Codes zuverlässig angezeigt, dass State für self nicht definiert ist. robert
Ich nutze Python bisher nur auf dem Raspberry PI ohne Entwicklungsumgebung. Code wird per Editor geschrieben, ausgeführt dann direkt in der Konsole.
Michael _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
_______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
Am 27.01.19 um 18:57 schrieb Michael S.:
Heute wieder einmal einen Fehler entdeckt, wo ich von "self.State" gelesen habe, statt von "State". "self.State" gab es gar nicht, wird nirgends angelegt und nie verwendet. Das war einfach falsch runtergeschrieben.
Diesen Fehler hätte z.B. "pylint" gefunden: https://github.com/PyCQA/pylint
Offenbar analysiert Python den Code vor Ausführung nicht tief genug, um sowas zu entdecken.
Die dynamische Natur von Python macht so etwas schwierig. Z.B. lassen sich Attribute zu Klassen und Instanzen problemlos während der Laufzeit hinzufügen und nicht nur von Code, der in der Klasse "lebt". Dabei muss nicht mal der Name des Attributs als Identifier im Code auftauchen: class Foo: pass f = Foo() setattr(Foo, '\x73\x70\x61\x6d\x6d', 'ham') print(f.spamm) Da ist es für eine Code-Analyzer schwer nachzuvollziehen, dass 'spamm' in der letzten Zeile ein valider Attributwert ist. Chris
Michael S. <michaely@bigfoot.de> schrieb: Hallo Michael!
Hallo Leute, ich habe hier seit vielen Jahren einen Raspberry PI als Heizungsgregler eingesetzt. Alles ist in Python umgesetzt. Was mich nervt, ist, dass bestimmte Programmierfehler durch Python erst dann entdeckt werden, wenn die Programmausführung diesen Codeteil durchläuft. Das passiert teilweise aber extrem selten oder jahrelang auch mal nicht. Heute wieder einmal einen Fehler entdeckt, wo ich von "self.State" gelesen habe, statt von "State". "self.State" gab es gar nicht, wird nirgends angelegt und nie verwendet. Das war einfach falsch runtergeschrieben. Offenbar analysiert Python den Code vor Ausführung nicht tief genug, um sowas zu entdecken.
Gibt es eine einfache Möglichkeit, den Python Code dahingehend tiefer analysieren zu lassen? Jeder C-Compiler bekommt sowas ja auch hin.
Probier mal pylint aus. In dem oben beschriebenen Fall sollte pylint über das nicht in __init__ gelistete self.State berichten.
Ich nutze Python bisher nur auf dem Raspberry PI ohne Entwicklungsumgebung. Code wird per Editor geschrieben, ausgeführt dann direkt in der Konsole.
Ich bin auch nur auf der Konsole und Editor unterwegs. In vielen Fällen ist es auch nützlich, Testroutinen für einzelne Python Dateien zu erstellen, die im if __name__ == '__main__': Konstrukt abgearbeitet werden. Damit habe ich mir auch vorab die eine oder andere Überraschung erspart. Viele Grüße, Christoph
Michael S. <michaely@bigfoot.de> schrieb:
Gibt es eine einfache Möglichkeit, den Python Code dahingehend tiefer analysieren zu lassen? Jeder C-Compiler bekommt sowas ja auch hin.
Eine IDE wird dir solche Fheler normalerweise zumindest als Warnung markieren. Gruß Thomas
Wenn ihr Code Fans seit, und alles FOSS ist, macht es keinen Unterschied ansonsten vllt etwas ohne Telemetrie nutzen. https://www.fossmint.com/vscodium-clone-of-visual-studio-code-for-linux/ Ich selbst nutze pycharm. Liebe Grüße Reimar Thomas Dreher <thodre@dustpuppy.ddns.net> schrieb am Do., 18. Apr. 2019, 08:35:
Michael S. <michaely@bigfoot.de> schrieb:
Gibt es eine einfache Möglichkeit, den Python Code dahingehend tiefer analysieren zu lassen? Jeder C-Compiler bekommt sowas ja auch hin.
Eine IDE wird dir solche Fheler normalerweise zumindest als Warnung markieren.
Gruß
Thomas _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
Hallo Michael, wenn Du den Python-Code mit emacs erstellst und die Erweiterung elpy/flycheck installiert hast, werden schon bei der Eingabe sehr viele Fehler abgefangen. Natürlich ist das nur eine formale, keine inhaltliche Überprüfung Deines Codes. Grüße Frank Am 18.04.19 um 08:30 schrieb Thomas Dreher:
Michael S. <michaely@bigfoot.de> schrieb:
Gibt es eine einfache Möglichkeit, den Python Code dahingehend tiefer analysieren zu lassen? Jeder C-Compiler bekommt sowas ja auch hin. Eine IDE wird dir solche Fheler normalerweise zumindest als Warnung markieren.
Gruß
Thomas _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
-- *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+* Frank Grellert Email: frank.grellert@gmail.com Webseite: http://fotoblog.57ps.de/ Öffentlicher Schlüssel: http://fotoblog.57ps.de/contact.html Fingerprint: 2A41 9AAB AAF2 1ACD 6E2D 5961 2081 5B08 42AF 47B5 *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
participants (8)
-
Christoph Brinkhaus
-
Christopher Arndt
-
Dinu Gherman
-
Frank Grellert
-
Michael S.
-
Reimar Bauer
-
robert
-
Thomas Dreher