J'essayais d'exécuter un code où je voulais lire des feuilles Excel. Le problème était, s'il y a un fichier qui n'a pas de feuille nommée, dites: SheetSum Je ne peux pas le déplacer vers l'emplacement d'erreur !! Le code que j'ai écrit était:
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')
Erreur de don:
[WinError 32] Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus
J'ai dû ajouter un try except with finallybloc complet et dire que finallyje dois fermer le fichier dans tous les cas comme:
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')
Sinon, le fichier reste ouvert est l'arrière-plan.
Si finallyest présent, il spécifie un gestionnaire de nettoyage . La try
clause est exécutée, y compris toutes les clauses exceptet else. Si une exception se produit dans l'une des clauses et n'est pas gérée, l'
exception est temporairement enregistrée . La finallyclause est exécutée. S'il y a une exception enregistrée, elle est sur-levée à la fin de la finally
clause. Si la finallyclause lève une autre exception, l'exception enregistrée est définie comme contexte de la nouvelle exception.
..Plus ici