인프런 커뮤니티 질문&답변

콘소메님의 프로필 이미지
콘소메

작성한 질문수

남박사의 파이썬 기초부터 실전 100% 활용

사용자 함수

사용자 함수 강의 부분에서 질문있습니다!

해결된 질문

작성

·

213

1


def get_input_user(msgcasting):
    
    while True:
        try:
            value = casting(input(msg))
            return value
        except:
            continue



user = get_input_user("이름을 입력하세요"str)
age = get_input_user("나이를 입력하세요"int)
>> 이를 실행했을 때, 숫자를 입력하면 while 문이 돌고,
문자열을 입력해야만 다음으로 넘어가는 것 아닌가요?
"이름을 입력하세요" 8
이라고 입력하면 원래는
"이름을 입력하세요"
가 다시 나와야 하는건데, "나이를 입력하세요"
로 넘어갑니다.... 혹시 제가 놓친 부분이 있을까요?

답변 2

2

남박사님의 프로필 이미지
남박사
지식공유자

"이름을 입력하세요" 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

콘소메님의 프로필 이미지
콘소메
질문자

 사람이 입력할때는 8 을 입력하면서 숫자로 생각하고 입력했겠지만 casting(input(msg)) 에 의해 str 로 캐스팅 되어 8은 문자형태가 되었고 try except 문에 걸리지 않게 됩니다.

<< 이 부분을 제가 몰랐었네요! 해결됐습니다 ㅎㅎ 감사합니다! 

콘소메님의 프로필 이미지
콘소메

작성한 질문수

질문하기