2013-04-13 2 views
1

저는 파이썬에서 정말 새로운데 예외에 대한 경험이 없지만 모든 문서를 읽었으며 대답을 찾을 수 없었습니다 ... 그래서 나는 의미론을 제외하고 더 깊은 관점을 찾고 있습니다. 우리는 예를 들어있을 때 :파이썬에서 예외가되는 것은 무엇입니까?

라는 메시지가 거기 GreaterThanOne 클래스 (예외)을위한 방법 printed.Is되고 싶어이 경우
try: 
    x = 2 
except GreaterThanOne: 
    print("The value is greater than one") 

가 입력 된 값이 1보다 큰 경우 인상 정의 할?


가 좋아, 내가 맞다 속성 오류에 추가해야합니다 특정 규칙에 의해 ... 좀 더 구체적으로

모든 오류 제기하자? 예를 들어 :이 코드를 사용와 y에 입력 할 때 Y가로 설정되어있는 경우

try: 
    myvalue = x/y 
except ZeroDivisionError: 
    print("Some error message printed ...") 

그래서 ZeroDivisionError가 올릴 것이다 제외하고 ... 내가 예를 들어 다음과 같이 인상 ZeroDivisionError를 재정의 할 수있다 0으로 만합니다. .. 2 또는 3 또는 다른 값?

입력 :

x = 10 
y = 2 
try: 
    myvalue = x/y 
except ZeroDivisionError: 
    print("division by 2") 

출력 : division by 2

답변

5

여기 당신이 이해할 수 있도록해야한다 예입니다. 이것을 파이썬 인터프리터에서 실행하고 set_val(2)을 호출 할 때 예외가 발생하고 캐치 (catch)되지 않는 것을 관찰하십시오.

# Defining our Exception subclass: 
class GreaterThanOne(Exception): 
    pass 

# The global value we pretend to care about: 
val = 0 

# Function to set a value but possibly raise our new Exception 
def set_val(new_val): 
    if new_val > 1: 
     raise GreaterThanOne("%d > 1" % new_val) 
    val = new_val 

# Catching exception: 
try: 
    set_val(0) 
    set_val(1) 
    set_val(2) 
except GreaterThanOne: 
    print "Whoops - one of those values was greater than one" 

# Not catching exception: 
set_val(0) 
set_val(1) 
set_val(2) 
set_val(3) 
+0

당신의 대답은 할 수 있지만,이 예외 클래스의 속성 인에 대한 살펴 제외 (부울 표현식이 될 수있는) 시도를 가지고 때 .. . 제외하고? – Danailbd

+0

귀하의 질문에 개언을 시도하십시오 ... 당신은 무엇을 성취하려고합니까? – dkamins

0

try-except 블록은이 블록에서 예외를 캐치합니다.

try: 
    #some stuff here 
except ExceptionClass as e: 
    #Exception handling here 

except 키워드 뒤에있는 클래스는 어떤 종류의 예외를 나타낼 지 나타냅니다. 일반적으로 ValueError 또는 KeyError와 같은 특정 클래스를 제공합니다. 예외를 잡으려면 Exception 클래스를 사용할 수도 있습니다. 다른 모든 예외 클래스는 Exception에서 상속 받기 때문입니다.

이 구문을 사용하려면 호출하는 함수/메소드로 예외를 발생 시키거나 raise 키워드를 사용하여 예외를 발생시켜야합니다. 이 같은

:

try: 
    raise KeyError('Just for test') 
except KeyError as e: 
    #Exception handling here 

자동적으로 그 사이에 전체 코드를 검사하지 않습니다 제외한 시도는, 그냥 예외를 찾습니다 ... 또는 더 구체적으로, 그것은 그 예외를 찾습니다 당신이 그것을 말해 찾을 것이다.

물론 예외 인스턴스를 검사 할 수도 있습니다.

try: 
    raise KeyError('Just for test') 
except KeyError as e: 
    print e.args 

자세한 내용은 다음을 참조하십시오 http://docs.python.org/2/tutorial/errors.html

+1

'KeyError, e except except'문법은 'except KeyError as e'를 선호하여 잠시 사용되지 않습니다.이것은 OP가'print'를 함수로 사용하는 것처럼 보이기 때문에 특히 관련이 있습니다. 따라서 아마도 쉼표 형식이 구문 오류 인 Python 3에있을 것입니다. – lvc

+0

고마워, 편집 했어. – Benjamin

관련 문제