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 finallyBlock hinzufügen und sagen, dass finallyich 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 finallyvorhanden, wird ein Bereinigungshandler angegeben . Die try
Klausel wird ausgeführt, einschließlich aller Klauseln exceptund else. Wenn eine Ausnahme in einer der Klauseln auftritt und nicht behandelt wird, wird die
Ausnahme vorübergehend gespeichert . Die finallyKlausel wird ausgeführt. Wenn es eine gespeicherte Ausnahme gibt, wird diese am Ende der finally
Klausel erneut ausgelöst. Wenn die finallyKlausel eine andere Ausnahme auslöst, wird die gespeicherte Ausnahme als Kontext der neuen Ausnahme festgelegt.
..Mehr hier