2014-06-09 3 views
0

다른 프로그래밍 언어로 내 컴퓨터에 프로젝트를 만들 파이썬 프로그램을 작성 중입니다. 이것은 특정 프로젝트의 언어가 선택되기 시작하며 오류를 합리적으로 처리하는 방식으로 작업하려고했습니다.예외 발생 후 변수가 할당되지 않음

지금까지이 코드가 있습니다.

def prompt_user(): 
    print "Enter the number of the project you would like to create.\n" 

    aOptions = ["1. Java", "2. C/C++", "3. Python", "4. Web"] 
    for sOption in aOptions: 
     print sOption 

    try:  
     iOptionChosen = int(raw_input("> ")) 
     if not(1 <= iOptionChosen <= 4): 
      raise ValueError 
     else: 
      return iOptionChosen 
    except ValueError: 
     print "\nInvalid value entered. Try again." 
     prompt_user() 

print prompt_user() 

그것은 내가 예외가 발생하며, 사용자가 입력하라는 메시지 후, 그것은 결코 iOptionChosen에 새 변수를 재 할당 없다는 사실을 제외하고 수행하는 데 필요한 잘 작동합니다. 이것이 왜 간단한 수정인가? 너무 초조하다.

도움을 주셔서 감사합니다. except 경우

+1

[이 질문에] 유용 할 수 있습니다 (http://stackoverflow.com/a/23294659/3001761). – jonrsharpe

답변

5

:prompt_user 반복적으로

except ValueError: 
    print "\nInvalid value entered. Try again." 
    prompt_user() 

전화. 대신 제공하는 값을 반환해야합니다

except ValueError: 
    print "\nInvalid value entered. Try again." 
    return prompt_user() 
+0

최대한 빨리 답변을 수락하겠습니다! 프로그래밍에 익숙하지 않아서 빠른 질문입니다. prompt_user()와 prompt_user()를 구분하는 것이 중요한 이유는 무엇입니까? – user1472065

+2

함수가 반환 한 값을 사용하지 않으면 그 값이 버려집니다. 이 경우 값을 반환하기를 원하므로'return'을 사용하십시오. 다른 상황에서는 변수에 저장할 수 있습니다. – kindall

1
당신은 논리에 while를 추가하는 것이 좋습니다

; 이런 식으로 입력이 유효 할 때까지 루프는 while에 머물러있게됩니다.

user_deciding = True 
while user_deciding: 
    try: 
     choice = int(raw_input("> ")) 
     if choice in list_of_choices: 
      user_deciding = False 
     else: 
      raise ValueError 
    except ValueError: 
     print "Please make a valid choice." 

handle_choice_made(choice) 

또는, 당신은 당신의 if 5 > choice > 0 구문을 사용할 수 있지만, 단순히 기존 목록 또는 대신 유효한 데이터 항목을 나타내는 마법 범위 확인의 사전에 차용하는 데이터 구조를 사용하는 것이 가치가있을 수 있습니다.

+0

좋은 생각입니다. 나는이 매직 넘버 타입의 것들을 사용하지 말아야한다. – user1472065