エクセルシートを読みたいコードを実行しようとしていました。問題は、say: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 = {}
sheets_file = None
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:
if sheets_file:
sheets_file.close()
return sheets
read_file(file)
shutil.move( file, dirpath +'\\processed_files')
それ以外の場合、ファイルはバックグラウンドで開いたままになります。
finally
が存在する場合は、クリーンアップハンドラーを指定します。try
anyexcept
および句を含む句が実行されますelse
。いずれかの句で例外が発生し、処理されない場合、
例外は一時的に保存されます。finally
句が実行されます。保存された例外がある場合は、finally
句の最後で再発生します。finally
句で別の例外が発生した場合、保存された例外が新しい例外のコンテキストとして設定されます。
..詳細はこちら