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 finally
blok i powiedzieć, że finally
muszę 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 finally
jest obecny, określa procedurę czyszczenia . try
Klauzula jest wykonywany, w tym każdy except
i else
klauzul. Jeśli wyjątek wystąpi w którejkolwiek z klauzul i nie zostanie obsłużony,
wyjątek zostanie tymczasowo zapisany . finally
Klauzula jest wykonywany. Jeśli istnieje zapisany wyjątek, jest on ponownie zgłaszany na końcu finally
klauzuli. Jeśli finally
klauzula wywołuje inny wyjątek, zapisany wyjątek jest ustawiany jako kontekst nowego wyjątku.
.. Więcej tutaj