Estaba tratando de ejecutar un código donde quería leer las hojas de Excel. El problema era, si hay un archivo que no tiene una hoja llamada, por ejemplo: SheetSum ¡No puedo moverlo a la ubicación de error! El código que escribí fue:
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')
Dando error:
[WinError 32] El proceso no puede acceder al archivo porque otro proceso lo está utilizando
Tuve que agregar el try except with finally
bloque completo y decir que finally
necesito cerrar el archivo en cualquier caso como:
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')
De lo contrario, el archivo sigue abierto es el fondo.
Si finally
está presente, especifica un controlador de limpieza . La try
cláusula se ejecuta, incluidas las cláusulas except
y else
. Si se produce una excepción en cualquiera de las cláusulas y no se maneja, la
excepción se guarda temporalmente . La finally
cláusula se ejecuta. Si hay una excepción guardada, se vuelve a generar al final de la finally
cláusula. Si la finally
cláusula genera otra excepción, la excepción guardada se establece como el contexto de la nueva excepción.
..Más Aquí