Prüfen, ob Liste existiert

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
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

Hallo!

Gibt es eine Möglichkeit, zu prüfen, ob eine Liste bereits existiert? Falls sie nicht existiert soll sie erstellt werden.
So wie es

l=os.access("Macros",os.F_OK) #Ordner und Datei erstellen
if l==False:
os.mkdir("Macros")

gibt, um nicht vorhandenen Odner zu erstellen.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Meinst du wirklich Existieren oder willst du bloß prüfen ob die Liste befüllt ist?

Code: Alles auswählen

# Variante 1
try:
    print(my_list)
except NameError:
    print('Liste existiert nicht')

# Variante 2
if len(my_list) > 0:
    print(my_list)
else:
    print('Liste ist leer')

# Variante 2 (kürzer)
if my_list:
    print(my_list)
else:
    print('Liste ist leer')
BlackJack

@gahleitner: Wobei man dazu sagen sollte das ein `NameError` in der Regel ein Programmierfehler ist. In dem Falle würde man nicht prüfen ob eine Name existiert, denn entweder der existiert, oder man hat ein fehlerhaftes Programm und sollte den Fehler beheben statt den später im Programm irgendwie umgehen zu wollen.

Auch ist Dein gezeigter Quelltext für das Verzeichnis nicht wirklich „pythonisch“. In Python legt man einfach das Verzeichnis an und reagiert entsprechend auf eventuell dabei auftretende Ausnahmen. Das ist zudem sicherer/robuster, denn zwischen Test und Aktion bei Dir kann ja durchaus noch etwas passieren.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Hatte das mal vor einigen Tagen durchprobiert, dann eine bessere Lösung gefunden. Doch so wäre es wohl zur Not auch gegangen, wenn Du nur wissen möchtest, ob eine Variable existiert, denke ich mir. Oder?

Code: Alles auswählen

def is_defined(var):
    if var in globals() or var in locals():
        return True
    else:
        return False

# Den Bezeichner als String abfragen   
if is_defined("my_list"):
    print("Ist True")
else:
    print("Ist False")
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Also, ich mache das so:

Code: Alles auswählen

my_list = None

if not my_list:
    my_list = NewList()
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Melewo: globals enthält nur die globalen Variablen, locals nur "var". Also nein, das funktioniert nur in Ausnahmefällen
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@gahleitner: Die Lösung ist doch relativ einfach. Du machst für die Listen keine Variablen, sondern trägst sie in ein Dictionary ein. Und nachher kannst Du abfragen, ob die Liste da drin ist.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Jepp. Anstelle des NameErrors ist das Definieren des Namens mit None sauberer und auch üblich. Den tatsächlich zu verwendenden Wert setzt man bei Bedarf nachträglich ein.
Antworten