Fehlerermittlung durch Compiler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Barrns
User
Beiträge: 1
Registriert: Freitag 22. Mai 2015, 14:39

Hallo,
ich benutze folgendes Codesegment zur Ermittlung von Syntaxfehlern. Funktioniert soweit auch ganz gut.

import py_compile
py_compile.compile("quellstueck.py")

Aber:
Ich hatte jetzt gerade den Fall dass ich eine Funktion einer anderen Klasse verwenden wollte, die ich normalerweise mit
instanzname.funktionsname() aufrufen müsste. Habe aber fälschlicherweise nur funktionsname() geschrieben.
Der Compiler hat dies nicht angemeckert, wie es z.B. ein C++ Compiler tun würde, was dann zur Laufzeit zum Programmabsturz fuehrte.
Gibt es eine Möglichkeit, dies durch den Compiler oder durch eine andere Methode sofort zu erkennen (ohne es debuggen zu muessen, denn da ist es mir erst aufgefallen)?

Servus
Barrns
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Nein, das geht natürlich nicht, denn Ausdrücke werden ja nicht (generell) zur Compile-Zeit ausgewertet, sondern nur auf syntaktische Korrektheit hin überprüft. Folgendes kann ich ohne Probleme in eine Shell eingeben:

Code: Alles auswählen

def foo():
    bar()

def foo():
    a = Leberwurstbrot
Erst bei der Ausführung wird Python meckern :-)

Komisches Vorgehen, seinen Code zum "Testen" zu kompilieren btw... Für solche Probleme kannst (und solltest) Du Unit Tests (und auch Integrationstests) schreiben! :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Barns: In Python werden Namen dynamisch aufgelöst. Es ist also nicht möglich zu wissen, welche Variablen existieren, solange der Code nicht ausgeführt wird. Fehler kann man, wie in jeder anderen Programmiersprache nur durch testen finden. Syntaxfehler sind eben nur ein kleiner Teil aller Fehler. Daher frage ich mich, was Du mit Deinem compile erreichen willst?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Der Compiler ist wenig hilfreich um Fehler zu finden, da wie schon erwähnt nur Syntax Fehler vom Compiler gefunden werden. Es gibt allerdings Programme wie pyflakes oder pylint die statische Analyse betreiben und weitere Fehler sowie stilistische Probleme finden können.

Diese Tools können aber bei weitem nicht dass bieten was ein Compiler für eine Sprache wie C++ bieten kann. Die Tests die du ohnehin haben solltest, sollten solche Probleme aber abdecken.
Antworten