2010-01-22 2 views
9
#!/usr/bin/python 
str = "this" 
if(1): 
    print "Hi" 
else: 
    print str.any_random_function() 

Dies schlägt nicht fehl, wenn ich das Programm starte. Ich habe versucht, py_compile, aber das zeigte auch nicht den Fehler in der "else" -Schleife. Wie kann ich nun das Programm kompilieren und Fehler im Python-Code zuverlässig erkennen?Wie kann ich Kompilierungsfehler in Python überprüfen?

Danke.

+4

Ich glaube nicht, dass es in Python möglich ist. Methoden können dynamisch hinzugefügt, die Ausnahme erfasst oder die Methode __getattr__ überladen werden. In all diesen Fällen hängt Ihr Fehler vollständig von der Laufzeit ab. – fserb

+0

Eigentlich sollte dieses spezielle Beispiel von Pylint abgefangen werden. – Geo

+1

Es scheitert nicht, weil es nicht falsch ist. Ihr Modul könnte in einem Kontext importiert werden, in dem 'any_random_function' für die integrierte String-Klasse korrekt definiert ist. –

Antwort

5

Ich denke, Ihre beste Wette wäre pylint.

2

Python ist eine dynamische Sprache, so dass Sie nicht einfach wie in statischen Sprachen (C/C++/Java) nach Kompilierfehlern suchen können. Wenn Sie str.any_random_function zuweisen, wäre der obige Code korrekt (okay, das ist ein schlechtes Beispiel ...).

Ich würde vorschlagen, dass Sie PyDev for Eclipse verwenden, die automatisch viele häufige Probleme in Ihrem Code findet, wie fehlende Funktionen/Module usw. Es unterstützt auch pylint (optional).

+0

Es ist einfach für einen zufälligen Schlüsselspeicher, einem Funktionsaufruf ein Zeichen hinzuzufügen. Ist es also empfehlenswert, pylint durch die gesamte Codebasis laufen zu lassen oder Komponententests und eine 100% ige Codeabdeckung zu haben, um den falschen Funktionsaufruf zu erfassen? Danke für die Antworten. – stacka

+0

Es dauert einige Zeit, um sich an pylint zu gewöhnen, und es kann viele (nutzlose) Nachrichten erzeugen, wenn es nicht richtig konfiguriert ist. Wie auch immer, als guter Softwareentwickler sollten Sie immer eine 100% ige Codeabdeckung durch Komponententests erreichen. Der Vorteil ist, dass sie (halb-) automatisch ausgeführt werden können - Pylint-Nachrichten müssen von Menschen interpretiert werden. – AndiDog

+0

Ich würde auch Unit-Tests empfehlen. –