Python - try~except (예외처리)

닉네임유저·2023년 8월 7일

Python - 기초 문법

목록 보기
12/13
post-thumbnail

try~except - 예외처리

개발자는 에러가 발생할만한 곳에서 에러가 발생해도, 다른방식으로 처리하거나 에러를 무시하는 방식을 써서 프로그램이 죽지 않도록 방지한다.

문법적으로는 예외가 없으나 , 코드 실행 단계 발생하는 예외처리는 해줘야할 때가 있음

  • 예외는 어떤 방식으로든 반드시 처리해야함
  • 프로그램의 안정성을 높이고, 오류 메시지를 사용자가 이해하기 쉽도록 설정

예외 처리 기본 선언

try:
    # 코드 실행 시도
except Error1:
    # Error1 처리
except Error2:
    # Error2 처리
else:
    # 예외가 발생하지 않았을 때 실행되는 블록
finally:
    # 항상 실행되는 블록 (예외 발생 여부와 관계없이)

SyntaxError: 문법 오류 - 잘못된 문법 사용

def example_Syntax_error():
    try:
        # SyntaxError: 문법 오류 - 잘못된 문법 사용
        print('ffff')  # ffff 출력
    except SyntaxError as e:  # 파이썬에서는 문법 오류가 발생하면 코드가 실행되지 않기 때문에 이를 예외처리하지 않는것은 어렵다.
        print(f"문법 오류 : {e}")

TypeError: 타입 오류 - 잘못된 데이터 타입 사용

def example_type_error():
    try:
        # TypeError: 타입 오류 - 잘못된 데이터 타입 사용
        x = 10 + "5"  # 숫자와 문자열의 덧셈
    except TypeError as e:
        print(f"타입 오류 : {e}")

NameError: 네이밍 오류 - 변수가 정의되지 않음

def example_name_error():
    try:
        # NameError: 변수가 정의되지 않음
        print(non_existent_variable)
    except NameError as e:
        print(f"네이밍 오류 : {e}")

IndexError: 인덱스 오류 - 존재하지 않는 인덱스에 접근

def example_index_error():
    try:
        my_list = [1, 2, 3]
        # IndexError: 인덱스 에러 - 존재하지 않는 인덱스에 접근
        print(my_list[5])
    except IndexError as e:
        print(f"인덱스 오류 : {e}")

ValueError: 참조값 오류 - 잘못된 값을 사용

def example_value_error():
    try:
        # ValueError: 참조값 오류 - 잘못된 값을 사용
        number = int("안녕하세요")  # 정수로 변환할 수 없는 문자열
    except ValueError as e:
        print(f"참조값 오류 : {e}")

KeyError: 키 오류 - Dict 키 값이 없음

def example_key_error():
    try:
        my_dict = {"name": "user", "age": 30}
        # KeyError: 딕셔너리 키 값이 없음
        print(my_dict["city"])  # 해당 키가 없음
    except KeyError as e:
        print(f"딕셔너리 키 값 오류 : {e}")

FileNotFoundError: 파일 없는 오류 - 파일이나 디렉터리가 없음

def example_file_not_found_error():
    try:
        # FileNotFoundError: 파일이나 디렉터리가 없음
        with open("non_existent_file.txt", "r") as file:
            content = file.read()
    except FileNotFoundError as e:
        print(f"파일 없는 오류 : {e}")

ZeroDivisionError: 0으로 나누기 시도

def example_zero_division_error():
    try:
        # ZeroDivisionError: 0으로 나누기 시도
        result = 10 / 0
    except ZeroDivisionError as e:
        print(f"0으로 나눌수 없는 오류 : {e}")

실행

if __name__ == "__main__":
    example_Syntax_error()
    example_value_error()
    example_type_error()
    example_name_error()
    example_index_error()
    example_value_error()
    example_key_error()
    example_file_not_found_error()
    example_zero_division_error()

raise 예외 처리

  • 직접적으로 에러 처리를 해야할 때 사용 및 간판한 예외처리
while True:
    try:
        x = 'user'
        if x == 'user':
            print('유저 인증') # 유저 인증 출력
            break
        else:
            raise ValueError
    except ValueError:
        print('유저 인증이 되지 않았습니다.')
    else:
        print('유저 인증이 완료되었습니다.')
    finally:
        print('인증 처리가 종료되었습니다.') # 종료 출력
profile
이것저것 다해보는 개발자

0개의 댓글