Próbowałem uruchomić kod, w którym chciałem czytać arkusze programu Excel. Problem polegał na tym, że jeśli istnieje plik, który nie ma arkusza o nazwie powiedz: SheetSum Nie jestem w stanie przenieść go do lokalizacji błędu !! Kod, który napisałem to:
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')
Podawanie błędu:
[WinError 32] Proces nie może uzyskać dostępu do pliku, ponieważ jest używany przez inny proces
Musiałem dodać pełny try except with finallyblok i powiedzieć, że finallymuszę zamknąć plik w każdym przypadku, np .:
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')
W przeciwnym razie plik nadal pozostaje otwarty w tle.
Jeśli finallyjest obecny, określa procedurę czyszczenia . try
Klauzula jest wykonywany, w tym każdy excepti elseklauzul. Jeśli wyjątek wystąpi w którejkolwiek z klauzul i nie zostanie obsłużony,
wyjątek zostanie tymczasowo zapisany . finallyKlauzula jest wykonywany. Jeśli istnieje zapisany wyjątek, jest on ponownie zgłaszany na końcu finally
klauzuli. Jeśli finallyklauzula wywołuje inny wyjątek, zapisany wyjątek jest ustawiany jako kontekst nowego wyjątku.
.. Więcej tutaj