Seite 1 von 1

import und true

Verfasst: Mittwoch 18. Februar 2004, 14:23
von AllesMeins
Hiho,

ich stehe gerade vor einem ziemlich seltsamen Problem.

Bisher habe ich from wxPython.wx import * benutzt um das Modul zu importieren. Nun habe ich prübiert das etwas einzuschränken und den Befehl so umgeschrieben:

from wxPython.wx import wxFrame, wxTextCtrl, wxMenu, wxMenuBar

Und seit dem kennt Python plötzlich kein true und false mehr. An einer komplett anderen Stelle des Scriptes taucht plötzlich dieser Fehler auf:

File "runonce.py", line 144, in erweitert
zeige = true;
NameError: name 'true' is not defined

Allerdings ist an dieser Stelle weit und breit keine GUI oder dergleichen verwendet. Das ist eine eigenständige Funktion die erst mal direkt nichts mit den GUI Funktionen zu tun hat. Wenn ich wieder den alten import befehl nehme, funktioniert wieder alles. Hat irgendwer eine erklärung dazu, wie sowas zustande kommen kann? Ich meine true und false sind ja nunmal nicht ganz unwichtige Bestandteile einer Sprache, wie können die plötzlich weg kommen?

Grüsse

Verfasst: Mittwoch 18. Februar 2004, 14:40
von Dookie
Hi AllesMeins,

versuchs mal mit

Code: Alles auswählen

from wxPython.wx import wxFrame, wxTextCtrl, wxMenu, wxMenuBar, true
oder verwende unter Python 2.3 den boole-Type mit den Konstanten True bzw. False


Gruß

Dookie

Verfasst: Mittwoch 18. Februar 2004, 18:19
von Leonidas
True und False sind erst ab Python 2.2 vorhanden, du kannst aber eine abfrage machen:

Code: Alles auswählen

if [Python version ist kleiner als 2.2]:
    True = 1
    False = 0
wx definiert scheinbar selbst ein true und flase, da ist aber gar nicht schön.

Spielerei für Python 2.3 (interaktive shell):

Code: Alles auswählen

True + True + True

Verfasst: Mittwoch 18. Februar 2004, 18:45
von Milan
Leonidas hat geschrieben:wx definiert scheinbar selbst ein true und false
Hi. Es scheint so zu sein, weil die dann immer versionsunabhängig da sind. Das wurde wahrscheinlich nur zur besseren Lesbarkeit des Quellcodes gemacht, weil bei den vielen Nullen und Einsen kann man sonst schnell den Überblick verlieren.

Milan

ps: die Abfrage der Pythonversion ist mit sys.version_info möglich.

Verfasst: Mittwoch 18. Februar 2004, 19:19
von Dookie
Es geht auch am Anfang des Scripts mit

Code: Alles auswählen

if not getattr(__builtins__,"True",0):
    True = 1
    False = 0

Gruß

Dookie

Verfasst: Donnerstag 19. Februar 2004, 00:27
von akIra
Leonidas hat geschrieben: Spielerei für Python 2.3 (interaktive shell):

Code: Alles auswählen

True + True + True
8)

Verfasst: Donnerstag 19. Februar 2004, 01:08
von Dookie
es gibt auch Halbwahrheiten

Code: Alles auswählen

True/2.0

Dookie

Verfasst: Donnerstag 19. Februar 2004, 13:23
von Leonidas
Milan hat geschrieben:Hi. Es scheint so zu sein, weil die dann immer versionsunabhängig da sind. Das wurde wahrscheinlich nur zur besseren Lesbarkeit des Quellcodes gemacht, weil bei den vielen Nullen und Einsen kann man sonst schnell den Überblick verlieren
Ja, ich mache es ja auch bei Python 2.1, das ist schon praktisch.

True steht auch in Python 2.3 für eine 1, aber bei type(True) ist es ein bool. Schön kompatibel.