-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
사용자 함수 강의 부분에서 질문있습니다!
20.03.11 17:16 작성 조회수 146
1
def get_input_user(msg, casting):
while True:
try:
value = casting(input(msg))
return value
except:
continue
user = get_input_user("이름을 입력하세요", str)
age = get_input_user("나이를 입력하세요", int)
>> 이를 실행했을 때, 숫자를 입력하면 while 문이 돌고,
문자열을 입력해야만 다음으로 넘어가는 것 아닌가요?
"이름을 입력하세요" 8
이라고 입력하면 원래는
"이름을 입력하세요"
가 다시 나와야 하는건데, "나이를 입력하세요"
로 넘어갑니다.... 혹시 제가 놓친 부분이 있을까요?
답변을 작성해보세요.
2
남박사
지식공유자2020.03.11
"이름을 입력하세요" 8
이라고 입력을 하면 작성된 사용자 정의 함수에서 자동으로 8 을 str 로 캐스팅했기 때문에 문제가 없는 코드가 됩니다. 사람이 입력할때는 8 을 입력하면서 숫자로 생각하고 입력했겠지만 casting(input(msg)) 에 의해 str 로 캐스팅 되어 8은 문자형태가 되었고 try except 문에 걸리지 않게 됩니다.
말씀하신 의도대로 동작하게 하려면 추가적인 코드가 필요하게 됩니다.
def get_input_user(msg, casting):
while True:
try:
value = casting(input(msg))
# 캐스팅 형태가 str 인경우에
if casting == str:
# 입력된 값이 숫자형태라면 오류로 처리
if value.isnumeric():
raise Exception
return value
except:
continue
user = get_input_user("이름을 입력하세요", str)
age = get_input_user("나이를 입력하세요", int)
일단 즉흥적으로 만들어 봤습니다만... 위 코드처럼 수정되야 말씀하신대로 동작하게 됩니다. raise Exception 은 강제로 Exception 을 발생하게 하는 내용입니다. 참고되셨길 바라며 또 궁금한점 질문 남겨주시기 바랍니다.
0
콘소메
질문자2020.03.11
사람이 입력할때는 8 을 입력하면서 숫자로 생각하고 입력했겠지만 casting(input(msg)) 에 의해 str 로 캐스팅 되어 8은 문자형태가 되었고 try except 문에 걸리지 않게 됩니다.
<< 이 부분을 제가 몰랐었네요! 해결됐습니다 ㅎㅎ 감사합니다!
답변 2