Я намагався запустити код, де мені хотілося прочитати листи 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
пункт викликає інший виняток, збережений виняток встановлюється як контекст нового винятку.
.. Більше тут