2016-11-22 6 views
0

UPDATE: Ich denke, ich habe gerade realisiert, was ich herausfinden muss re: die unten, das ist der richtige Fehlertyp mit der Ausnahme-Klausel angeben (neu, offensichtlich)Beenden Python-Programm, wenn Datenverzeichnis leer ist

Ausgehend von einem angegebenen Stammverzeichnis, durchläuft mein Programm die Unterverzeichnisse, dann die darin enthaltenen Dateien, identifiziert gültige (.csv) Datendateien und aggregiert und führt dann Berechnungen für die Daten durch.

In Fällen, in denen das Stammverzeichnis leer ist, kann jemand eine saubere/anmutige Möglichkeit vorschlagen, das Programm einfach am Anfang ohne weitere Verarbeitung zu beenden?

Ich versuchte, einen Vorschlag, den ich hier anzupassen, aber es hat nicht funktioniert, wie ich erwartet hatte: Exit gracefully if file doesn't exist

dieser Person Code wurde:

def main(): 
    try: 
     file = open('file.txt', 'r') 
    except IOError: 
     print('There was an error opening the file!') 
     return 

ich das über einen Versuch gab, und es funktioniert für den obigen speziellen Fall. Als ich jedoch versuchte, es wie folgt anzupassen, brach es ab und ich bekam einen "Index außerhalb des Bereichs" -Fehler und fiel stattdessen auf den Ausnahmecode.

dir = os.listdir(masterDirPath) 
def main(): 
    try: 
     item = dir[0] 
    except IOError: 
     print('The data area is empty.') 
     return 

(auch/stattdessen ich sehr begrüßen Vorschläge für einige völlig andere Herangehensweise an die Aufgabe insgesamt)

+0

Sie sollten die Länge der Richt-Liste überprüfen, oder für den Indexfehler –

+0

Mögliche Duplikat außer Klausel hinzufügen [Ich möchte Ausnahme handle Liste der Index außerhalb des zulässigen Bereichs. '] (http://stackoverflow.com/questions/11902458/i-want-to-exception-handle-list-index-out-of-range) –

Antwort

1

Ihr Programm beenden sofort sollten Sie entweder exit() oder quit() verwenden. Anstatt einen Fehler zu werfen, können Sie die Tatsache nutzen, dass viele Objekte in Python truthy sind; Eine leere Liste ist False, und eine Liste mit einem oder mehreren Elementen ist True.

import os 
dir_contents = os.listdir('.') 
if dir_contents: 
    do_stuff 
else: 
    print('Directory was empty. Exiting') 
    exit() 

Wenn Sie Explizit lieber implicitness Sie auch die Länge der Liste len(dir_contents) vor der Indizierung in sie mit überprüfen können.

Sie könnten auch vermeiden, dir in Python als Variablennamen zu verwenden, da es die eingebaute Funktion dir() Schatten wird. Diese

+0

Danke, vor allem für die Ebene der Kontext/Detail. Sehr hilfreich. (Ich mag die "truthy" Beschreibung :-) – Margarita

1

Eine leere Liste hat keine Elemente, so dass Sie IndexError statt IOError fangen sollte.

def main(): 
    try: 
     item = dir[0] 
    except IndexError: 
     print('The data area is empty.') 
     return 
0
#!/usr/bin/env python 

import os 
path = 'path-to-your-dir' 
if os.listdir(path) == []: 
    exit(0) 
else: 
    print "Your other code goes here." 
1

Warum verwenden Sie eine Ausnahme?

if not dir: 
    print('The data area is empty') 
    exit(0) 

item = dir[0] 
0

sind die Exit-Befehle und ihre definitions

exit(0) bedeutet einen sauberen Ausgang ohne Fehler/Probleme

exit(1) bedeutet, es gab einige Problem/Fehler/Problem, und deshalb wird das Programm beendet wird.

os._exit() für Kind-Prozesse

quit() die Systemexit Ausnahme hinter den Kulissen.

sys.exit() töten den Interpreter

Verwandte Themen