Ich habe versucht, einen Code auszuführen, in dem ich Excel-Tabellen lesen wollte. Das Problem war, wenn es eine Datei gibt, die kein Blatt mit dem Namen "SheetSum" enthält. Ich kann sie nicht an den Fehlerort verschieben. Code, den ich schrieb, war:
def read_file(data_file):
# data_file = '\rr\ex.xlsx'
sheets = {}
try:
print("Reading file: "+data_file)
sheets['df_1'] = pd.read_excel(open(data_file,'rb'), 'SheetSum')
except Exception as excpt:
print("Exception occurred", exc_info=True)
return sheets
read_file(file)
shutil.move( file, dirpath +'\\processed_files')
Fehler geben:
[WinError 32] Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird
Ich musste einen vollständigen try except with finally
Block hinzufügen und sagen, dass finally
ich die Datei auf jeden Fall schließen muss, wie:
def read_file(data_file):
# data_file = '\rr\ex.xlsx'
sheets = {}
try:
print("Reading file: "+data_file)
sheets_file = open(data_file,'rb')
sheets['df_1'] = pd.read_excel(sheets_file, 'SheetSum')
except Exception as excpt:
print("Exception occurred", exc_info=True)
finally:
sheets_file.close()
return sheets
read_file(file)
shutil.move( file, dirpath +'\\processed_files')
Ansonsten bleibt die Datei im Hintergrund offen.
Wenn finally
vorhanden, wird ein Bereinigungshandler angegeben . Die try
Klausel wird ausgeführt, einschließlich aller Klauseln except
und else
. Wenn eine Ausnahme in einer der Klauseln auftritt und nicht behandelt wird, wird die
Ausnahme vorübergehend gespeichert . Die finally
Klausel wird ausgeführt. Wenn es eine gespeicherte Ausnahme gibt, wird diese am Ende der finally
Klausel erneut ausgelöst. Wenn die finally
Klausel eine andere Ausnahme auslöst, wird die gespeicherte Ausnahme als Kontext der neuen Ausnahme festgelegt.
..Mehr hier