답변:
에서 ArcPy 예 처럼 보인다 sys.exit()
초기 스크립트를 종료하는 올바른 방법입니다.
파이썬 문서의 노트가 sys.exit()
:
은 SystemExit 예외를 발생시켜 구현되므로 try 문의 finally 절로 지정된 정리 조치가 적용되며 외부 시도에서 종료 시도를 가로 챌 수 있습니다.
이를 처리하는 쉬운 방법은 스크립트를 예외 처리기에서 래핑하는 것입니다.
import sys
import arcpy
try:
#do stuff
sys.exit(0)
except SystemExit:
pass
그러나 이는 특히 우아하지 않으며 다른 수준의 들여 쓰기는 말할 것도없고 전체 프로젝트를 재구성해야합니다. 또한 코드의 다른 부분에서 SystemExit
예외를 발생시킬 가능성이 거의없는 상황에서 알 수없는 예외입니다.
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를 호출 할 수있을 것으로 예상처럼 ().
물론, 우리는 다른 상황에서 예외를 먹는 접근법을 사용하고 싶을 수도 있는데, 이것이 파이썬이기 때문에 유용한 다목적 데코레이터를 일반화하고 만들 수 있습니다.
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()