回答:
ArcPyの例からsys.exit()
、スクリプトを早期に終了する正しい方法のようです。
Pythonドキュメントのノートことsys.exit()
:
SystemExit例外を発生させることで実装されているため、tryステートメントのfinally句で指定されたクリーンアップアクションが優先され、外部レベルで終了の試行をインターセプトすることができます。
これに対処する簡単な方法は、スクリプトを例外ハンドラーでラップすることです。
import sys
import arcpy
try:
#do stuff
sys.exit(0)
except SystemExit:
pass
ただし、これは特にエレガントではなく、別のレベルのインデントは言うまでもなく、プロジェクト全体の再構築が必要です。さらに、コードの別の部分でSystemExit
例外が発生するというめったにない状況では、あなたはそれについて決して知らないでしょう...別の洗練されていないがおそらく好ましい解決策は、sys.exit()への呼び出しを別の関数でラップすることです:
import sys
import arcpy
def finish(arg=None):
try:
sys.exit(arg)
except SystemExit:
pass
#do stuff
finish()
今、あなたは呼び出すことができfinish()
、finish(1)
または、finish('Error message')
あなたは()sys.exitを呼び出すことができることを期待だけのよう。
もちろん、他の状況で例外を食べるアプローチを使用することもできます。これはPythonであるため、一般化して有用な多目的デコレーターを作成できます。
import sys
import arcpy
def eat_exception(fn, exception):
def safe(*v, **k):
try:
fn(*v, **k)
except exception:
pass
return safe
finish = eat_exception(sys.exit, SystemExit)
#do stuff
finish()