2013-07-25 2 views
1

파이썬에서 ifelif 조건 집합을 만족하지 못하면 else 문에 도달하고 실행됩니다.파이썬 : 올리기 예외 올바른

개발자가 코드의 특정 부분에 도달해서는 안된다는 것을 어떻게 알리고 예외 유형을 제기해야합니까?

예 :

if condition1: 
    # do something 
elif condition2: 
    # do something 
else: 
    raise ShouldVeNeverGotHereException 

이 상기 if 조건 중 적어도 하나가 실제로 True로 평가되도록하는 것이다. 내가 묘사 한 것을 달성하기 위해 더 우아한 패턴이 있다면, 제안 해주십시오.

답변

6

. 그러나 반드시해야한다고 가정 할 때 예외적 인 예외 유형은 아마도 ValueError입니다.

>>> foo = 3 
>>> if foo == 1: 
    pass 
elif foo == 2: 
    pass 
else: 
    raise ValueError('foo is unexpected value: %s' % foo) 


Traceback (most recent call last): 
    File "<pyshell#41>", line 6, in <module> 
    raise ValueError('foo is unexpected value: %s' % foo) 
ValueError: foo is unexpected value: 3 
+0

나는 downvote 자격이 내 대답에 대해 도움이되지 않거나 잘못 듣고 싶어요. 그렇게하면 내 대답을 향상시킬 수 있습니다! –

1

당신은 assert을 사용할 수 있습니다 : 당신은 느슨한 끝이 발생할 수 있습니다 코드를 작성해서는 안

if condition1: 
    do_stuff() 
elif condition2: 
    do_stuff() 
else: 
    assert condition1 and condition2, "condition1 and condition2 is False. Do not continue" # Or something similar 
+1

어설는 전통적으로 당신이 당신의 코드의 * 시작 *에서하고 싶은 일이며, 일반적으로 당신이 특정 값을 확인하는 데 사용하는 일이 아니라, 오히려 있도록 확실한 객체는 예상대로 상호 작용할 수 있습니다. 예를 들어, 지정된 파일 출력 경로가 있는지 여부를 확인하기 위해 assert를 사용하여 콘텐츠를 만드는 논리를 시작합니다. 문서에서 : "Assert 문은 디버깅 어설 션을 프로그램에 삽입하는 편리한 방법"입니다. 런타임 중에 잘못된 값이있는 변수는 디버깅 문제가 아닙니다. –

+0

나는'assert'의 사용에 대한 @InbarRose의 코멘트에 동의합니다. 당신의 대답은 "적어도 위 조건 중 하나가 실제로 참이라고 평가하는 것"에 대해 묻는 것에 만족하지만, @InbarRose의 대답은 전체 질문과 관련하여 그 머리에 못을 박는 다. –

+1

@JosvicZammit 좋아, 고마워. :) – TerryA

-5

더 우아한 방법은 없습니다. if, elif 및 else를 사용해야합니다. 발생시키는 오류에 관해서는 프로그램의 다른 부분에서 제기되지 않는 가장 오류가없는 오류를 발생시켜야합니다. 예를 들어 많은 라이브러리를 가져 오는 경우 ImportError가 발생하지 않아야합니다. 왜냐하면 ImportError가 표시되면 가져 오기 또는 스위치에 오류가 있는지 알 수 없기 때문입니다. 가장 좋은 방법은 예를 들어 ZeroDivisionError를 사용하는 것입니다. 그렇지 않으면 특정 오류 클래스를 만들 수 있습니다.

변명 내 나쁜 영어, 내가 이탈리아어 해요

+3

당신의 영어는 괜찮지 만 이것은 코드를 작성하는 데 극도로 나쁜 방법입니다. 조건부 스위치의 다른 끝점을 나타 내기 위해 임의의 예외 유형을 사용하면 안됩니다. 예외는 그것이 무엇인지 정확히 의미해야합니다. 새 예외 유형을 쉽게 정의 할 수 있습니다 (http://stackoverflow.com/a/17859124/1561176). –

+0

@InbarRose :이 질문에 대한 링크는 의도적이지 않은가? –

+1

@Mr_and_Mrs_D 글쎄 - 그 당시에 나는 커스텀 Exception 클래스를 만드는 방법에 대한 다른 대답에서 예제를 지적하려고했다. 그러나 모든 것이 지금은 효과가없는 것처럼 보입니다. –