質問: dst_bucket: logInfo('転送先バケット: {0}が存在します。処理を継続します。'.format(dst_bucket)) break else: pass else: logErr('転送先バケット: {0}が存在しません。処理を終了します。'.format(dst_bucket)) sys.exit(1) else: logErr('一時退避先フォルダ: {0}が存在しません。処理を終了します。'.format(dst_dir)) sys.exit(1) else: logErr('転送対象ファイル: {0}が存在しません。処理を終了します。'.format(file_path)) sys.exit(1) logInfo('全てのファイル、フォルダ、バケットが存在するため、処理を継続します。') ``` コードの補足 ------ * Windows Server内の特定ファイルを一時退避フォルダにコピーし、コピーしたファイルをS3に転送するスクリプトを書いています。その中で、特定ファイル、一時退避フォルダ、転送先S3バケットの存在確認をする関数が上記コードになります。 * file_path: フルパスが入ります。 * dst_dir: フルパスが入ります。 * dst_bucket: バケット名が入ります。 * logInfo(): Infoレベルでログを出力します。 * logErr(): Errorレベルでログを出力します。
回答: `sys.exit`するのであればあえてネストしなくても書けます(`return`等にしても同じ)。この方が可読性が上がります。 ``` def CheckTargetExists(file_path, dst_dir, dst_bucket): # 転送対象ファイルの存在確認 if os.path.isfile(file_path): logInfo('転送対象ファイル: {0}が存在します。処理を継続します。'.format(file_path)) else: logErr('転送対象ファイル: {0}が存在しません。処理を終了します。'.format(file_path)) sys.exit(1) # 一時退避フォルダの存在確認 if os.path.isdir(dst_dir): logInfo('一時退避先フォルダ: {0}が存在します。処理を継続します。'.format(dst_dir)) else: logErr('一時退避先フォルダ: {0}が存在しません。処理を終了します。'.format(dst_dir)) sys.exit(1) # S3バケットの存在確認 for i in s3.list_buckets()['Buckets']: if i['Name'] == dst_bucket: logInfo('転送先バケット: {0}が存在します。処理を継続します。'.format(dst_bucket)) break else: logErr('転送先バケット: {0}が存在しません。処理を終了します。'.format(dst_bucket)) sys.exit(1) logInfo('全てのファイル、フォルダ、バケットが存在するため、処理を継続します。') ``` 6つあるメッセージは定型文で、「存在する対象」「継続するか終了するか」が変わるだけなので、生成する関数を書くことも考えられます。しかし、そうするとコードの見通しがかえって悪くなるので、これはこのままでもいいと思います。