개발자 미니민의 개발스터디

[파이썬] 예외

by mini_min
[파이썬] 예외

🖋️ 예외

: 예외가 발생하면 프로그램이 종료된다.

예외 발생시 프로그램 종료를 막기 위해서 try ~ except 문을 사용한다. 

try 안에 예외가 발생할 가능성이 있는 코드를 쓰고 except 안에 예외 발생할 때 실행할 코드를 작성한다.

# 모든 예외처리 

print("---시작---")

try: # 예외가 발생할 가능성이 있는 코드
    a = 10
    b = 0
    c = a / b
    print(f"{a} / {b} = {c}")
except: #예외 발생할 때 실행할 코드
    print("예외 발생...")
    
print("---종료---")

 

: 예외 회피

예외 발생할 때 실행할 코드에 pass 를 넣어 예외 회피

# 모든 예외처리 - 예외 회피

print("---시작---")

try: # 예외가 발생할 가능성이 있는 코드
    a = 10
    b = 0
    c = a / b
    print(f"{a} / {b} = {c}")
except: #예외 발생할 때 실행할 코드
    pass
    
print("---종료---")

 

: 예외 발생할 때 실행할 코드에 예외 타입을 설정한다. 

# 모든 예외처리

print("---시작---")

try: # 예외가 발생할 가능성이 있는 코드
    a = 10
    b = 0
    c = a / b
    print(f"{a} / {b} = {c}")
except ZeroDivisionError: #예외 발생할 때 실행할 코드
    print("0으로 나눌 수 없습니다.")
    
print("---종료---")

: 예외 변수

# 모든 예외처리 - 예외변수

print("---시작---")

try: # 예외가 발생할 가능성이 있는 코드
    a = 10
    b = 0
    c = a / b
    print(f"{a} / {b} = {c}")
except ZeroDivisionError as err: 
    print(err)
    
print("---종료---")

: 예외 변수 2

# 여러 예외처리 

print("---시작---")

try: # 예외가 발생할 가능성이 있는 코드
    a , b = map(int, input('두 정수 ? ').split())
    c = a / b
    print(f"{a} / {b} = {c}")
except ValueError: 
    print("정수만 입력 가능합니다.")
except ZeroDivisionError: 
    print("0으로 나눌 수 없습니다.")
except Exception as err:
    print(err)
    
print("---종료---")
# 여러 예외처리 

print("---시작---")

try: # 예외가 발생할 가능성이 있는 코드
    a , b = map(int, input('두 정수 ? ').split())
    c = a / b
    print(f"{a} / {b} = {c}")
except (ValueError, ZeroDivisionError): 
    print(" 연산 불가 ")
except Exception as err:
    print(err)
    
print("---종료---")

 

: 상위 예외타입을 마지막에 기술하지 않으면 하위 예외타입은 처리하지 않는다.

# 여러 예외처리를 처리하는 경우 상위 예외타입을 마지막에 기술하지 않으면
# 하위 예외타입은 처리하지 않는다.

print("---시작---")

try: # 예외가 발생할 가능성이 있는 코드
    a , b = map(int, input('두 정수 ? ').split())
    c = a / b
    print(f"{a} / {b} = {c}")
except ValueError: 
    print("정수만 입력 가능합니다.")
except Exception: 
    print("0으로 나눌 수 없습니다.")
except ZeroDivisionError as err:
    print(err)
    
print("---종료---")

 

: finally 는 예외 발생과 상관없이 실행된다.

# try ~ except ~ finally

print("---시작---")

try: # 예외가 발생할 가능성이 있는 코드
    a , b = map(int, input('두 정수 ? ').split())
    c = a / b
    print(f"{a} / {b} = {c}")

except Exception: 
    print("0으로 나눌 수 없습니다.")
finally:
    print("예외 발생이랑 상관없이 실행")

print("---종료---")
# try ~ finally

print("---시작---")

try: # 예외가 발생할 가능성이 있는 코드
    a , b = map(int, input('두 정수 ? ').split())
    c = a / b
    print(f"{a} / {b} = {c}")
except Exception: 
    print("0으로 나눌 수 없습니다.")
else:
    print("예외가 발생하지 않은 경우만 실행... 굳이 ..?")
finally:
    print("예외 발생이랑 상관없이 실행")

print("---종료---")

 

: 예외 발생은 raise 문을 사용한다. 해당 구문을 사용해 명시적으로 예외를 발생시킨다.

#예외 발생 

a = int(input('1~5이내의 수 ? '))

if a < 1 or a > 5:
    raise

print(f"입력한 값: {a}")
#예외 발생 

try:
    a = int(input('나이 ? '))

    if a < 0:
        raise
    result = "성인" if a >= 19 else "미성년자"
    print(f"나이 : {a}, {result}")    
except:
    print("나이는 0 이상만 입력 가능!! ")
#예외 발생  -  예외 타입 명시

try:
    a = int(input('나이 ? '))

    if a < 0:
        raise ValueError
    result = "성인" if a >= 19 else "미성년자"
    print(f"나이 : {a}, {result}")    
except ValueError:
    print("나이는 0 이상만 입력 가능!! ")

 

: 예외 발생시 예외 타입을 명시할 수 있다.

#예외 발생  -  예외 타입 명시

try:
    a = int(input('나이 ? '))

    if a < 0:
        raise Exception('나이는 0 이상만..')
    result = "성인" if a >= 19 else "미성년자"
    print(f"나이 : {a}, {result}")    
except Exception as err:
    print(err)

 

: 사용자 정의 예외 클래스를 만들 수 있다.

Exception 클래스나 그 하위 클래스를 상속 받아서 구현한다.

class MyError(Exception):
    pass

try:
    a = int(input('영문자 ASCII 코드 :'))
    if(not(a>=65 and a <= 90) and not (a>= 97 and a<=122)):
        raise MyError
    c = chr(a)
    print(f"ASCII 코드 : {a}, 문자 : {c}")
except MyError:
    print("영문자 코드가 아닙니다.")

 

: assert 구문 은 어떤 조건이 True 임을 보증하기 위해서 사용한다.

단순 에러를 찾는 것이 아니라 값을 보증하기 위해 사용된다. 

조건이 거짓이면 보증하지 않은 동작이면 AssertionError 를 발생한다. 

def test(n):
    assert type(n) is int, "정수가 아닌 값이 존재..."
    
a = [1,2,3,4,5.5,7]
for n in a:
    test(n)
print('모든수가 정수..')

 

 

 

'Python' 카테고리의 다른 글

[파이썬] 정규식  (0) 2022.12.25
[파이썬] 파일 처리  (1) 2022.12.25
[파이썬] 모듈  (0) 2022.12.25
[파이썬] 클래스 다중상속, 추상 메서드  (1) 2022.12.25
[파이썬] 클래스 2  (0) 2022.12.25

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기