2016-10-18 2 views
-1

저는 아직 파이썬을 처음 접했습니다. try : 및 ValueError를 사용해야합니까? 그렇지 않은 경우 언제 사용해야합니까? 일부 부품 예try :와 ValueError를 사용해야합니까?

Def Main_Menu(): 
    Main_menu_op = input("A.Start \nB.Options \nC.Exit") 
    Try: 
     if Main_menu_op == "A" or "a": 
      Start() 

     elif Maim_menu_op == "B" or "b": 
      Options() 

     elif Main_menu_op == "C" or "c": 
      Exit() 
    except ValueError: 
     print("error") 
     Main_menu() 

로하고 그것없이 일을 내 태블릿에있어 내 PC가 그래서 그냥 실수

시이 텍스트 기반의 게임의 일부를 무시하지 이후로 난 그냥이 입력 내가 작업 중임

+0

오류를 복구하려면 예외를 catch 할 수 있습니다. 오류를 복구하지 않으려면 예외를 catch 할 필요가 없습니다. – khelwood

답변

2

try블록은 런타임 오류가 발생할 수있는 코드를 묶어야합니다. 오류 유형 (이 경우에는 입력이 ValueError)의 선택적 인수는 블록을 변경하여 해당 유형의 예외 만 catch합니다. 귀하의 예제에서 주어진 옵션 중 어느 것도 올바르게 선택되지 않았다면 오류 메시지를 생성하려고하는 것처럼 보입니다.

다른 입력을 수신해도 if 문 중 아무 것도 통과하지 않지만 예외는 발생하지 않습니다. try : except 대신에 if 문에 else 블록을 추가로 사용해야합니다. 실제 예외는 일반적으로 0으로 나누는 것과 같이 불법적 인 작업을 시도 할 때 코드를 종료하기 위해 예약되어 있습니다. create your own 사용자 지정 예외로 불법적 인 동작을 모방하려는 경우 if 문을 사용해야 할 때 테스트해야합니다.) 다음 사용자 지정 예외를 사용하여 raise을 호출하십시오.

나는 또한 당신의 ifelif 조건에서, 난 당신이 ==or의 연산자 우선 순위를 착각 생각하는 것을 지적하고 싶습니다. 등가 연산자 : ==는 연산자 우선 순위 때문에 true 또는 false 값을 생성하기 때문에 먼저 호출되거나 또는 평가됩니다. true 또는 false 값은 항상 true로 평가되는 비어 있지 않은 문자열 ('a', 'b' 또는 'c')과 비교됩니다. 대신 다른 == 비교를 다음과 같이 추가 할 수 있습니다. if Main_menu_op == "A" or Main_menu_op == "a":

+0

감사합니다. 당신은 내 문제의 또 하나를이 문제와 함께 해결했습니다. –

+0

NPC에게 어떤 NPC가 –

+0

*을 입력하도록 선택했을 때 미안 .talk을 입력하면 항상 대장장이 –

0

특정 알려진 오류를 안전하게 처리 할 수 ​​있다는 것을 알고있을 때는 tryexcept ...Error (documentation) 만 사용해야합니다.

ValueError과 같은 특정 오류가 예상되는 경우이를 잡아서 응용 프로그램이 충돌하는 대신 처리 할 수 ​​있습니다. 의 당신이 사용자의 입력이 있다고 가정하자 다수의 예상 : 오류를 기대하지 않거나 (또는 ​​처리 할 적절한 방법이 없다)을 처리 할 준비가없는 경우

... 
a = raw_input('Please give me a number: ') # input(...) on Python 3. 
try: 
    number = float(a) 
except ValueError: 
    print 'You have not given me a valid number, defaulting to 0.' 
    number = 0. 
# do stuff with number 
... 

을, 당신은 오류를보고 할 수 있습니다 콘솔에서 트레이스를 디버깅 할 수 있습니다.

'else'를 사용하여 주어진 명령이 인식되지 않는다고 말하고 다른 것을 요청할 수 있습니다.

관련 문제