Exceptions ignorieren und Funktion weiter ausführen?

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
goldenapple
User
Beiträge: 1
Registriert: Montag 2. November 2009, 02:26

Hallo zusammen,

bin seit gestern dabei mich mit Python zu beschäftigen und komm bei einer kleinen Funktion die ich mir gerade zusammenbastele nicht weiter. Hoffe mir kann jemand helfen.

ALSO... ich möchte Dateien (jede Datei liegt einzeln in einem Ordner) in das übergeordnete Verzeichnis verschieben. Das klappt im großen und ganzen eigentlich auch, nur ist in jedem Ordner eine "Thumbs.db", was Python zum mekern veranlasst und den Vorgang abbrechen lässt. Meine Frage jetzt an euch, kann man diese Exception irgendwie ignorieren, damit die Funktion weiter und bis zum Ende ausgeführt wird oder, kann man eine Datei beim ausführen von shutil.move überschreiben?

hier mein Anfänger-Code:

Code: Alles auswählen


import os
import shutil
import sys

def movef(src):
    try:
        ordnerliste = os.listdir(src)
        for d in ordnerliste:
            pfad = src + d
            if os.path.isdir(pfad):
                files = os.listdir(pfad)
                for f in files:
                    pfad2 = pfad + "\\" + f
                    print("Verschieben: " + pfad2 + "   -------->   " + src)
                    shutil.move(pfad2, src)
    except:
        print("\n-------------------------------------------------\n")
        print("Unbekannter Fehler: ", sys.exc_info())



Fehlermeldung:

Code: Alles auswählen

Unbekannter Fehler:  (<class 'shutil.Error'>, Error("Destination path '#######\\Thumbs.db' already exists",), <traceback object at 0x02D78378>)
Vielen Dank schon mal!

goldenapple
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Man sollte nach Möglichkeit nur auf bestimmte Ausnahmen reagieren. Hier wäre es also:

Code: Alles auswählen

[...]
except shutil.Error:
    pass
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Und um deine Frage gänzlich zu beantworten:

Packe den 'Try ... except shutil.Error' - Block direkt um 'shutil.move', also in die Schleife. Dann werden auftretende Fehler während des Verschiebens ignoriert und der Prozeß trotzdem fortgesetzt. Ob es wirklich wünschenswert ist, Fehler (auch wenn sie auf shutil.Error begrenzt sind) einfach zu ignorieren, sei mal dahingestellt.

Generell gilt: Try ... Except immer so kleinteilig und spezifisch wie möglich gestalten. Sonst läuft man Gefahr, Fehler, die man gar nicht abfangen wollte, zu verschleiern und wundert sich dann über das seltsame Verhalten des Programms ...
Antworten