2012-04-09 3 views
2

저는 Python을 처음 접했습니다. 나는 예외를 사용하지 않고 간단한 오류 처리를 달성하는 방법을 궁금해했다. 가끔은 과장이라고 생각한다. 내가 패턴 함께했다,하지만 난 그것이 파이썬 방법입니다 있는지 확실하지 않습니다 :Python의 간단한 오류 처리 패턴

def someFunct(someArgs): 
    # do stuff... 
    if error: 
     return False, 'error message' 
    return True,None 

success,errMsg = someFunct(myAwesomeArgs) 
if success: 
    # yey! 
else: 
    # handle error 
+0

답변 해 주셔서 감사합니다. 요약 : 파이썬의 예외는 그렇게 비싸지 않습니다 (예, 저는 Java에서 왔습니다). – Pedru

+1

예외를 피하기 위해 코드를 더 복잡하게 만드는 경우 퍼포먼스에 대한 진정한 우려 때문에 처음에는 파이썬을 사용하지 말아야 할 것입니다 ... 즉, 성능에 대한 우려의 매우 큰 부분은 실제로 진짜가 아니라고 말했습니다 :) –

+0

파이썬에서 예외를 사용하는 것은 규칙이 아니라 ... 예외라고 생각합니다. –

답변

0

당신은 당신처럼했을 것입니다. :) 그래, 예외를 통해 오류를 넘겨주는 것은 예외는 아니지만, Python에서는 매우 일반적입니다. 따라서 관용적으로 예외를 사용하려고합니다. 하지만 여기에 당신의 코드가 있습니다 (조금 바뀌 었습니다)

def somefunc(*args): 

    # do stuff, return -1 on eror 
    error_value = do_suff() 
    if error_value == -1: 
      return True, "error message" 
    else: 
      return False, None 

success, err = somefunc(1,2) 

if success: 
    # yay! 
else: 
    # handle error 
3

파이썬에서 예외를 사용하는 것은 너무나 과장되지 않습니다. 파이썬에서 예외가 응용 프로그램의 흐름을 제어하는 ​​여러 장소에서 사용되는, 예를 들어, 수 영상 당신이 당신의 패턴을 사용하여 다음과 같은 방법이 있습니다

def some_function(*args): 
    """Do stuff using a loop.""" 

    for i in [1, 2, 3, 4]: 
     print i 

    return True, None 

가에서 이미 StopIteration exception입니다 예외가를, 즉, 예외 사용을 피하려고 할 때도 내부적으로 사용됩니다. 그래서 내 대답은, 예외를 사용하여,이 자바, C#을 등 .. 코드의 나머지 부분에 비해 예외는 완전히 비싸고 당신은 단지 코드를 unpythonic하고 있습니다.

0
def someFunct(someArgs): 
    try: 
    # do stuff... 
    return True,None 
    except: 
     return False, 'error message' 

당신은 오류가 사용할 수있는 제기가 무엇인지 알고있는 경우 : 등등

except errorType1: 
     return False, 'very bad' 
    except errorType2: 
     return False, 'very very bad' 
    except errorType3: 
     return False, 'the computer is dead. get a new one' 

하고 있습니다.