ArcMapでPythonスクリプトを自己終了しますか?


17

試しましたsys.exitが、ArcMap 10では機能しないようです。

誰もがそれを行う方法を知っていますか?

回答:


16

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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.