Seite 1 von 1

Fehlerermittlung durch Compiler

Verfasst: Freitag 22. Mai 2015, 15:01
von Barrns
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

Re: Fehlerermittlung durch Compiler

Verfasst: Freitag 22. Mai 2015, 15:13
von Hyperion
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! :-)

Re: Fehlerermittlung durch Compiler

Verfasst: Freitag 22. Mai 2015, 18:28
von Sirius3
@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?

Re: Fehlerermittlung durch Compiler

Verfasst: Freitag 22. Mai 2015, 18:38
von DasIch
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.