현재 예외를 잡아내는 코드를 작성하려고하고 있으며 어떤 예외가 던져 졌는지에 따라 예외가 발생하지 않은 경우와 다른 모듈을 가져옵니다.파이썬 예외 잡기 및 별도의 메시지 인쇄
try:
import sge_execution_engine as execution_engine
except ImportError:
print "Use local execution engine because SGE support is missing!"
print sys.exc_info() # Print out the exception message
import local_execution_engine as execution_engine
except RuntimeError:
print "Using local execution engine because SGE support is missing!"
print sys.exc_info()
import local_execution_engine as execution_engine
제 예외 잡힌 ImportError
는 (sge_execution_engine
내부 import drmaa
문있다) 파이썬 drmaa
모듈 import sge_execution_engine
실행 중에 발견 될 수 없을 때 발생 예외를 잡는다. 두 번째 예외 인 RuntimeError
은 drmaa
파이썬 라이브러리 (sge_execution_engine
내부의 import drmaa
문 실행 중 비슷 함)를 찾았지만 drmaa
C 라이브러리가 OS에 설치되어 있지 않으면 포착됩니다. 이 두 개의 except
문이 파이썬 drmaa
라이브러리, drmaa
C 라이브러리가 없거나 Sun Grid가없는 시스템에서이 모듈을 실행하려고 할 때 발생할 수있는 모든 예외를 포착하기에 충분해야합니다. 엔진이 설치되었습니다. 이러한 수익금이 없으면 모듈은 import local_execution_engine
으로 진행되므로 코드가 사용자의 컴퓨터에서 로컬로 실행될 수 있습니다. 현재 코드는 sge를 사용하여 예외를 발견 할 때 로컬 가져 오기라는 의미에서 예상대로 작동하지만 여전히 더 강력하게 만들기 위해 여기에서 예외 처리를 개선하려고합니다.
내 의견으로는 stdout에 인쇄 된 실제 예외 메시지를 갖는 것이 좋은 이유는 사용자가 sge_execution_engine을 가져올 수없는 이유를 알 수 있기 때문입니다. 특히 가져 오기에 실패 할 것으로 기대하지 않는 경우에 특히 그렇습니다. 대신 실제로 실제 예외 메시지가 화면에 인쇄하도록 print sys.exc_info()
를 사용
그러나, 나는 아마 더 좋은 방법은 except EXCEPTION as some_variable_name
형식을 사용하고 print some_variable_name
을 인쇄하고도 관련 지을 수 있었던 속성의 일부를 호출하는 것입니다 것을 깨달았다 던져진 예외는 some_variable_name
에게 배정됩니다.
except IOError as e
덩어리가 구체적으로
errno
에 호출하여 세밀한 방법으로 예외 메시지를 처리하는 것처럼
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except IOError as e:
print "I/O error({0}): {1}".format(e.errno, e.strerror)
except ValueError:
print "Could not convert data to an integer."
except:
print "Unexpected error:", sys.exc_info()[0]
raise
보인다 IOError
개체의 strerror
특성 그러나 IOError
documentation을 보면 예외에 대한 설명서의 일부로 나열된 특정 특성이 표시되지 않습니다. 사실, 이것은 파이썬 문서에있는 다른 모든 예외에서도 마찬가지입니다. 따라서 특정 예외와 관련된 속성이 무엇인지 파악할 수있는 방법이없는 것처럼 보입니다. 이에 대해 전혀 알지 못하면 import EXCEPTION as some_variable_name
구문을 사용하여 예외를 처리 할 때 some_variable_name
개체에서 호출 할 특성을 파악할 수있는 방법은 무엇입니까?
아무에게도 제안을 해주시고 답이 직접 내 질문에 답하지 않더라도 내 예외를 어떻게 처리 할 수 있는지에 대한 완전히 다른 제안이 있으시면 주저하지 마시고 게시하다!
대단히 감사합니다!
도움 주셔서 감사합니다. 그러나 귀하의 제안에 따라 일부 예외에 대한 속성을 여전히 찾을 수 없습니다. 예를 들어, 계층 구조를 살펴 보거나 ValueError => StandardError => Exception (계층 구조에서 가장 낮은 것부터 가장 높은 것까지)에 대해서는 어떤 속성도 찾을 수 없습니다. 그리고이 예외를 제외하고, 이와 같은 예외도 있습니다. 그렇다면이 예외에 대해 어떤 속성을 호출해야하는지 어떻게 알 수 있습니까? 'except some_exception as e' 문법을 사용하고 있다면 (Pydocs에서했던 것처럼) 속성을 호출하지 않고 예외를 인쇄하기에 충분한'print e'를 수행하고 있습니까? – AKKO
@AKKO : 대부분의 예외에는 '예외'에 정의 된'args'와'message' 속성 외에 표준 속성을 제외한 _any_ 속성이 없습니다. 자세한 내용으로 답변을 업데이트하겠습니다. – abarnert