2012-10-27 3 views
0

나는 비교적 Python에 익숙하지 않으며 클래스에 관해 두 가지를 배우려고한다. 기능에 대한 경험이 있고 수업이 어떻게 작동하는지 이해하려고합니다. 내 질문은 오류 처리에 관한 것입니다."return False"를 클래스에 쓰는 방법과 "try/except"절

일반적으로 함수를 사용하면 몇 가지 연산을 수행 할 수 있으며 문제가 발생하면 False를 반환하고 나머지 코드 실행과 함께 계속 진행하기 전에 함수가 호출 된 곳에서 유효성을 검사 할 수 있습니다.

클래스로 어떻게 할 수 있습니까?

나는 간단한 방법으로 간단한 클래스가 있다고 가정 :

내가 my_object "수영"을 만들
my_object = MyObj() 
my_object.swim() 

, 나는 간단하게, 오류 또는 문제를 처리 할 수 ​​있어야합니다. 예 :

def swim (..) 실행 중 : False를 반환하거나 다른 오류를 발생시키고 응용 프로그램을 완전히 중단시키지 않고 처리 할 수 ​​있어야합니다.

e.e.

try: 
    my_object.swim() 
except: 
    # it can not swim. I want it to tell me why or just tell me "False" so I can execute another codeblock and tell it to perhaps .walk_away() 

나는 약 그들이 수업이 얼마나 오류를 제기 블록을 제외하고 시도/읽기 : 내가 원하는. 하지만 메서드를 실행하고 그 메서드의 실행 결과를 처리하려고하는 것 (사실, 거짓 또는 다른 오류 일까?)을 좋아하지 않습니다.

어떻게 이것을 파이썬에서 할 수 있습니까?

감사합니다.

+1

false를 반환하여 오류를 처리하려면 해당 작업을 계속하지 않는 것이 좋습니다. 메소드에서 성공 코드를 반환 할 수 없다는 클래스 나 객체 지향 코드에 대해서는 특별한 것이 없습니다. –

+0

내 메서드의 반환 값을 이름 변수에 할당하고 유효성을 검사하지 않으니까. 나는 시도하고 싶다 : 예외 : 특히이 방법은 단지 양수 또는 음수가 아닌 다른 코드로 오류를 생성 할 수 있기 때문에. – Phil

+0

그러나 swim()이 평범하지 않은 함수가 아니라 메서드라는 사실과 특히 관련이없는 것 같습니다. –

답변

5

당신은 할 것이다 다음

class MayNotSwimException(Exception): 
    def __init__(reason): 
     self.reason = reason 

class Person(object): 
    def __init__(self, can_swim): 
     self.can_swin = can_swim 

    def swim(self): 
     if self.can_swim: 
      self.do_something() 
     else: 
      raise MayNotSwimException("I can't swim because...!") 

    def walk_away(self): 
     self.do_something_else() 



p = Person(can_swim = False) 
try: 
    p.swim(): 
except MayNotSwimException as e: # In python 2.5-, use MayNotSwimException, e 
    print "That person can't swim because", e.reason 
    p.walk_away() 

예외가 사용할 수 있습니다 :

  • 알터 제어의 흐름을 예외 통해
  • 전송 정보를 (A try/except 블록에 다시 점프) 그 자체. 이는 다른 유형의 Exceptions (즉, MayNotSwimBecauseDoesntWantExceptionMayNotSwimBecauseFeelsSleepyException을 정의하고 별도로 잡을 수 있음) 또는 Exception 객체 자체의 속성 (e.reason)을 통해 수행 할 수 있습니다.

자세한 내용은 have a look at the documentation을 참조하십시오!

+1

[MayNotSwimException을 e로 제외하면 안됩니다] (http://stackoverflow.com/q/2535760/102441)? – Eric

+0

@Eric 글쎄,', e'는 파이썬 2.x에서 유효합니다.하지만 파이썬이 구문의 명료 함에서 가장 위대한 업적은 아니라고 말하는 것이 옳습니다. 나는 갱신 할 것이다! –

2

수영 메서드 자체에서 try..except 또는 다른 형식의 오류 (및 반응 코드)를 확인합니다. 예외는 치명적일 필요는 없지만 코드를 깨끗하게 유지하기 위해 일반 조건문을 사용할 수있는 곳에서는 사용을 제한하는 것이 좋습니다.

관련 문제