[Python-de] Testen, ob Variabel existiert

Marcus Habermehl bmh1980de at yahoo.de
Sam Sep 4 11:29:18 CEST 2004


Am Fre, den 03.09.2004 um 21:39 Uhr +0200 schrieb Diez B. Roggisch:
> > Weil ich nicht so wirklich die Ahnung habe. :-( Bis eben habe ich noch
> > nie etwas von dicts gehört. Muss mich darüber mal schlau machen.
> >
> > Laut meinem schlauen Büchlein werden dicts mit dict() oder dict(Inhalt)
> > aufgerufen. Warum verwendest du hier progs = {} ?
> 
> Aeh - man kann dicts auch mit dict() erzeugen und zB (shallow) kopieren - aber 
> ueblicherweise benutzt man die eingebauten Konstruktoren {}.
> 
> Ehrlich gesagt ist es etwas erschreckend, das du von dictionaries nix gehoert 
> hast - ich empfehle dir _dringend_ das python-tutorial mal durchzuarbeiten. 
> Denn dicts sind dermassen grundlegend, das zu befuerchten ist das du 
> sonstewas fuer Klimmzuege machst in deinem Code, wenn du sie nicht betutzt.

Vielleicht habe ich es ja gelesen, als ich angefangen habe mich mit
Python zu beschäftigen. Mein Problem ist aber, dass ich derartige Sachen
erst dann lerne, wenn ich sie auch wirklich benutze. Also nur lesen
bringt nix. Und den Code stur abtippen hat mir auch nicht geholfen.

Was die Klimmzüge angeht: Schau dir mal
http://de.geocities.com/bmh1980de/pyrpmbuilder-0.1.tar.gz an. Das war
mein erstes Python-Skript. Sogar ich, mit meinem fehlendem Wissen finde,
dass da eine Menge Klimmzüge drinn sind. :-( Leider!

> > Ich muss doch bei gtk.RadioButton eine Gruppe von RadioButton angeben,
> > wenn immer nur ein RadioButton aktiv sein darf. Wenn ich die Gruppe auf
> > ProgA beziehe, kann es ein Problem geben, wenn ProgA nicht existiert,
> > sondern erst ProbB.
> >
> > Die Übergabe der Variabel group für die Gruppe schien mir am
> > einfachsten. Bzw. war die einzige Lösung, die mir eingefallen ist.
> 
> Ich verstehe das immer noch nicht - was willst du denn wie gruppieren?

Hier mal einen Auszug aus der PyGTK FAQ. Da habe ich das mit der Gruppe
nämlich her.

[Ausschnitt PyGTK FAQ]

9.1. How does one group radio buttons to allow only one concurrent
button to be depressed?
GtkRadioButton() has a group parameter that defaults to None. The first
button in the group is the group parameter for the remaining buttons. So
you would do something like: 

 w = gtk.GtkWindow()
 v = gtk.GtkVBox()
 b1 = gtk.GtkRadioButton(label="Cows")
 b2 = gtk.GtkRadioButton(label="Dogs", group=b1)
 b3 = gtk.GtkRadioButton(label="Mountains", group=b1)
 v.add(b1)
 v.add(b2)
 v.add(b3)
 w.add(v)
 w.show_all()

[/Ausschnitt PyGTK FAQ]

> > Es gibt nur, oder hat nur vier Pfadmöglichkeiten zu geben. ;-) Und die
> > habe ich jeweils mit pfad1 bis pfad4 in eine Variabel gepackt. Damits
> > nicht so lang wird, hab ich hier die letzten Zwei unterschlagen. Aber
> > wegen die vier Möglichkeiten habe ich ja auch jeweils or mit eingebaut.
> 
> Na, das ist aber sehr blauaeugig - warum genau 4? Und bloss weil es dann mal 
> doch 5 sind den Code an tausend Stellen anfassen muessen? Das ist schlecht - 
> besser eine (globale) Liste, die die Suchpfade enthaelt. Die muss man dann 
> nur einmal anpassen - eventuell sogar per config.

Warum ist das blauäugig? Unter Linux (besser gesagt hier Slackware) gibt
es nur

pfad1=/usr/bin
pfad2=/usr/local/bin
pfad3=/usr/X11R6/bin
pfad4=/opt/kde/bin,

wo die Programme liegen könnten.

> Hast du denn wenigstens mit Listen zu tun gehabt bisher?

Abgesehen von dem oben genannte Skript (pyrpmbuilder.py) war es noch
nicht notwendig mit Listen zu arbeiten. Und bei pyrpmbuilder.py wusste
ich nicht, wie ich diese anwenden muss. Allerdings hat sich auch nicht
sehr viel daran geändert.

Meine letzten Skripte waren für GUIs, die ich mit Glade erstellt habe.
Daher waren diese Skripte sehr kurz und in erster Linie Frontends für z.
B. gconftool-2.

[...]

> > Das muss ich mir noch genauer anschauen. Auf den ersten Blick und meinem
> > Verständnis müsste ich das doch sowohl für mein Problem, als auch für
> > die Tests nehmen können.
> 
> Klar, innerhalb des 
> 
> if Found:
> 
> in meinem korrigierten Beispeil steht praktisch der Code fuer die 
> gui-elemente. Das dict muss nat. vorher nur einmal initialisiert werden.

Wenn ich das aus der Python-Hilfe richtig verstehe, ist der Inhalt von
dict() bei deinem Beispiel alles, was in [] geschrieben ist. Oder liege
ich da falsch?

Gruß

Marcus