Я намагався запустити код, де мені хотілося прочитати листи Excel. Проблема була в тому випадку, якщо є файл, на якому немає аркуша з назвою сказати: SheetSum, я не в змозі перемістити його до місця помилки !! Я написав код:
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')
Помилка надання:
[WinError 32] Процес не може отримати доступ до файлу, оскільки він використовується іншим процесом
Мені довелося додати повний try except with finallyблок і сказати, що finallyмені потрібно закрити файл у будь-якому випадку, наприклад:
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')
Інакше файл все ще залишається відкритим - фоном.
Якщо finallyвін присутній, він вказує обробник очищення . try
Пропозиція виконується, включаючи будь-які exceptі elseстатті. Якщо виняток трапляється в будь-якому з пунктів і не обробляється,
виняток тимчасово зберігається . finallyПропозиція виконується. Якщо є збережений виняток, він повторно піднімається в кінці finally
пункту. Якщо finallyпункт викликає інший виняток, збережений виняток встановлюється як контекст нового винятку.
.. Більше тут