try문에서 계속 오류가 납니다.

조회수 647회
try:    
        filename = input("파일 이름을 입력하세요: ") 
        with open(filename, 'r') as f:    
            text = f.read().lower()     
except FileNotFoundError:  
        print("파일이 없습니") 
 word = text.replace('!', ' ').split()

위와 같이 코드를 작성하면 없는 파일명을 입력할 때 마지막 코드에 UboundLocalError: local variable 'text' referenced before assignment 라는 에러가 뜹니다.

그래서 except 위치를 조정했더니

try:   
        filename = input("파일 이름을 입력하세요: ") 
        with open(filename, 'r') as f:    
except FileNotFoundError:   
        print("파일이 없습니다.")
        text = f.read().lower()

expected an indented block 이라는 에러가 계속 뜹니다. 제가 생각하기에는 with문 다음에 바로 except가 나와서 파일이 없으면 파일명을 입력하라는 문자열을 출력하고 다시 이름을 받는게 맞다고 생각하는데 무엇이 문제인지 모르겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 단순한문제입니다만 목적을 이해하기 어려운 코드를 작성했고 예외처리가 무엇인지 학습이 더 필요해보입니다.

    첫번째. 'UboundLocalError: local variable 'text' referenced before assignment 라는 에러' 같은 경우는 text = f.read().lower() 를 호출하기전 예외가 발생해서 그렇습니다. word = text.replace('!', ' ').split() text라는 변수를 할당하기도전에 참조를 하는 셈입니다.

    두번째. 예외가 발생하면 다음 라인을 무시하고 바로 except 절을 수행하는 것 입니다. 즉 아래와 같이 open 시 파일이 없다면 text = f.read().lower() 는 수행하지 않고 print("파일이 없습니다.") 를 수행하고 끝납니다.

    try:   
            filename = input("파일 이름을 입력하세요: ") 
            with open(filename, 'r') as f:    
                    text = f.read().lower()
    except FileNotFoundError:   
            print("파일이 없습니다.")
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)