Codecompletition, WingIDE, Shell und Pylint. Verständnisprob

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
uwe_holst
User
Beiträge: 12
Registriert: Samstag 26. Februar 2005, 06:25

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]
BlackJack

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.
uwe_holst
User
Beiträge: 12
Registriert: Samstag 26. Februar 2005, 06:25

Wieder was dazugelernt - danke

Uwe
uwe_holst
User
Beiträge: 12
Registriert: Samstag 26. Februar 2005, 06:25

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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:

Code: Alles auswählen

import sys; sys.exit(255)
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
Antworten