파이썬에서 런타임 오류 만 포착하십시오
-
05-07-2019 - |
문제
일부 조건에서 다음 오류가 발생하는 모듈을 가져오고 있습니다.
가져 오기 전에 루트 액세스를 확인할 수 있다는 것을 알고 있지만 향후 참조를 위해 시도/제외 명령을 통해이 풍부한 종류의 오류를 잡는 방법을 알고 싶습니다. 이 runtimeerror와 제기 될 수있는 다른 사람들을 구별 할 수있는 방법이 있습니까?
해결책
가져 오기 전에 루트 액세스를 확인할 수 있다는 것을 알고 있지만 향후 참조를 위해 시도/제외 명령을 통해이 풍부한 종류의 오류를 잡는 방법을 알고 싶습니다. 이 runtimeerror와 제기 될 수있는 다른 사람들을 구별 할 수있는 방법이 있습니까?
특정 조건으로 인해 오류가 발생하면 오류를 잡는 가장 쉬운 방법은 조건을 테스트하는 것이며보다 구체적인 오류를 직접 제기 할 수 있다고 생각합니다. 오류가 발생하기 전에 모든 '오류'가 존재하면이 경우 환경에 문제가 있기 때문에.
나는 위의 것들에 동의합니다 - 오류와 일치하는 텍스트는 일종의 끔찍한 전망입니다.
다른 팁
예외의 속성을 확인하여 다른 가능한 다른 것과 차별화 할 수 있습니다. RuntimeError
예외. 예를 들어, 사전 정의 된 메시지 텍스트와 일치하지 않으면 오류를 다시 표시하십시오.
try:
import pypatred
except RuntimeError,e:
if e.message == 'RuntimeError: pyparted requires root access':
return 'pyparted - no root access'
raise
물론, 직접 텍스트 비교는 단지 예일뿐입니다. 포함 된 하위 문자 또는 정규식을 검색 할 수 있습니다.
그것은 주목할 가치가 있습니다 .message
예외의 속성입니다 Python 2.6으로 시작하는 감가 상승. 텍스트를 찾을 수 있습니다 .args
, 대개 args[0]
.
... 2.6의 경우
message
속성은 더 이상 사용되지 않습니다args
기인하다.
try:
import pyparted
except RuntimeError:
print('RuntimeError is raised')
raise
더 튜토리얼에서 예외 처리.
이 상황은 생산해야합니다 ImportError
제 생각에는. 그리고 당신은 직접 할 수 있습니다 :
try:
import pyparted
except RuntimeError as e:
raise ImportError(e)
예.
try:
import module
except RuntimeError:
pass
수입은 다른 진술로 해석되며 특별하지 않습니다. 당신은 할 수 있습니다
if condition:
import module
try:
import ...
except RuntimeError:
# Do something
런타임 에러 다른 범주에 속하지 않는 오류가 감지 될 때 발생
def foo():
try:
foo()
except RuntimeError, e:
print e
print " Runtime Error occurred due to exceeded maximum recursion depth "
그것이 우리가 Python의 초과 재귀 한계로 인한 runtimeerror를 잡는 방법입니다.
그리고 재귀 한계를 통해 기능을 호출하려면 다음을 수행 할 수 있습니다.
import sys
def foo():
try:
foo()
except RuntimeError, e:
sys.setrecursionlimit(1200)
foo()
그러나 항상 재귀 한계를 변경하는 것이 권장되지 않지만 재귀 한계의 매우 작은 변화가 허용됩니다.