Ich habe versucht, einen Code auszuführen, bei dem ich Excel-Tabellen lesen wollte. Das Problem war, wenn es eine Datei gibt, die kein Blatt mit dem Namen "SheetSum" hat, bin ich nicht in der Lage, es an die Fehlerstelle zu verschieben!!! Der von mir geschriebene Code 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, weil sie gerade von einem anderen Prozess verwendet wird
Ich musste eine vollständige try except with finally
blockieren und erzählen finally
Ich muss die Datei in jedem Fall schließen:
def read_file(data_file):
# data_file = '\rr\ex.xlsx'
sheets = {}
sheets_file = None
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:
if sheets_file:
sheets_file.close()
return sheets
read_file(file)
shutil.move( file, dirpath +'\\processed_files')
Andernfalls bleibt die Datei weiterhin im Hintergrund geöffnet.
Si finally
vorhanden ist, gibt sie eine Bereinigungshandling . Die try
Klausel ausgeführt wird, einschließlich aller except
y else
Klauseln. Wenn eine Ausnahme in einer der Klauseln auftritt und nicht behandelt wird, wird die Ausnahme wird vorübergehend gespeichert . Die finally
Klausel ausgeführt wird. Wenn eine gespeicherte Ausnahme auftritt, wird sie am Ende der finally
Klausel. Wenn die finally
Klausel eine weitere Ausnahme auslöst, wird die gespeicherte Ausnahme als Kontext für die neue Ausnahme festgelegt.
Mehr Aquí