Moin moin,
ich arbeite unter Windows XP mit Wingide (3.1.4). Pylint ist installiert und funktioniert. Was ich nicht verstehe ist, daß die Codecompletition in Wingide andere Vorschläge macht als die Codecompletition im interaktiven Interpreter (sei es der in Wing integrierte, sei es IPython, sei es idle).
Beispiel:
import xturtle
Der interaktive Interpreter zeigt mir dann u.a. korrekt an:
xturtle.pensize()
Die Codecompletition in Wingide (im Editorfenster) zeigt mir genau das NICHT an. Was ich z.B. auch nicht sehe sind Dinge wie xturtle.left()...
Ich kann es im Code aber verwenden und das Skript läßt sich auch ohne Fehler ausführen. Das in Wingide integrierte Pylint mault rum "modul 'xturtle' has no pensize member". Der Code läßt sich aber ohne Probleme ausführen. In beiden identisch ist z.B. so etwas wie xturtle.RawPen().
Ich ging eigentlich davon aus, daß die Completition (bzw. der Vorschlag) im interaktiven Interpreter und der IDE gleich funktioniert.
Ich habe in Wingide noch keine Einstellung gefunden, die das steuert. Hat jemand eine Idee? Zur Info, ich bin in Sachen Python immer noch Anfänger
Gruß - Uwe[/code]
Codecompletition, WingIDE, Shell und Pylint. Verständnisprob
Die Vervollständigung in der IDE und Pylint analysieren statisch den Quelltext, der Interpreter führt ihn aus. Wenn Du in das Modul schaust, werden in der Tat so Sachen wie `xturtle.pensize` nicht offensichtlich auf Modulebene definiert. Um die zu "sehen" muss man das Modul erst ausführen, da werden nämlich ab ca. Zeile 3600 die Methoden von ein paar bis dahin erzeugten Objekten dynamisch als Funktionen im Modulnamensraum erzeugt. Und zwar auf eine Weise (Quelltext als Zeichenkette + ``exec`` und `eval()`) die man statisch beim besten Willen nicht analysiert bekommt.
Wenn ich Windows den gvim mit omni-complete verwende, zeigt der mir auch Methoden wie z.B. xturtle.pencolor() an. Dürfte daran liegen, daß der u.a. mit für Python kompiliert ist und wahrscheinlich den Interpreter anwirft.
Nur zur Info
Uwe
Nur zur Info
Uwe
Das ist richtig. Beim Mac wird leider das veraltete Python 2.3 benutzt, wodurch die Omni-Completion scheitert, wenn man Syntaxkonstrukte benutzt, die erst ab Python 2.4+ erlaubt sind. Außerdem wäre es spannend, mal zu schauen, was passiert, wenn man eine Datei hat, in der sowas steht:
Der Emacs führt übrigens auch den Code aus, nutzt dafür aber einen externen Python-Prozess. Da ist es nicht ganz so schlimm, wenn der Python-Interpreter abstürzt.
Stefan
Code: Alles auswählen
import sys; sys.exit(255)
Stefan