[Python-de] Testen, ob Variabel existiert

Marcus Habermehl bmh1980de at yahoo.de
Fre Sep 3 21:15:32 CEST 2004


Hallo.

Am Fre, den 03.09.2004 um 20:17 Uhr +0200 schrieb Diez B. Roggisch:
> >
> > if access(pfad1+'/progname', X_OK) or access(pfad2+'/progname', X_OK):
> >     if group:
> >         rbprogname = gtk.RadioButton(label = 'ProgName', group = group)
> >     else:
> >         rbprogname = gtk.RadioButton(label = 'ProgName')
> >         group = rbprogname
> >     vbox1.pack_start(rbprogname)
> >
> > progname ist im Skript immer der Name des gesuchten Programms.
> >
> > Kann jemand meiner Logik auf die Sprünge helfen?
> 
> Wieso verwendest du keine dicts?
> 
> progs = {}
> if access(pfad1+'/progname', X_OK) or access(pfad2+'/progname', X_OK):
>     if group:
>         progs[rbprogname] = gtk.RadioButton(label = 'ProgName', group = group)
>     else:
>         progs[rbprogname] = gtk.RadioButton(label = 'ProgName')
>         group = progs[rbprogname]
>     vbox1.pack_start(progs[rbprogname])

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 = {} ?

> Wobei die Sache mit der Variablen group mir nicht ganz klar ist.

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.

> Ausserdem ist dein acces-test nicht besonders clever - was wenn du mehr als 2 
> Pfade hast? Da sollte eine Liste hin - ungefaehr so:

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.

> paths = ["pfad1", "pfad2"]
> prognames = ["prog1", "prog2]
> 
> for progname in prognames:
>     found = False
>     for path in paths:
>         if access(os.path.join(path, progname)):
>             break
>     print "Found %s at %s" % (progname, path)

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.

Oder bin ich voll verpeilt?

Gruß

Marcus