파이썬 에러 생성 및 처리 방법(assert, raise, try)

Assert 사용 방법

  • 예외 처리(try, raise)함수와 달리 assert가정 설명문 입니다.
  • 즉, 어떤 조건이 True면 pass되고, 아니면 Error(오류)를 생성합니다.
  • 방법은 간단합니다.
  • assert (가정법), '에러 메시지 작성'이렇게 작성하기면 됩니다.
1
2
3
4
5
6
7
8
emd = 256
heads =8
head_dim = emd // heads

assert (head_dim * heads == emd), 'embed size needs to be div by heads'
print('hello')
# 실행하면 (head_dim * heads == emd)이 True 때문에 아무 출력 결과가 없다.
hello
1
2
3
4
5
6
7
8
9
10
11
# 앞의 값이 False라면
assert (head_dim * heads == emd + 1), 'embed size needs to be div by heads'
print('hello')

3 head_dim = emd // heads
4
----> 5 assert (head_dim * heads == emd + 1), 'embed size needs to be div by heads'
6

AssertionError: embed size needs to be div by heads
# 위와 같은 AssertionError가 생성된다.

Raise 사용 방법

  • 일부러 에러를 발생시켜야 되는 경우가 있는데, 이때 사용하는게 assert와 raise
  • raise는 assert와 달리 실행만 되면 에러가 생성됩니다.
1
2
3
4
5
6
7
8
9
10
11
# Exception으로 문구를 작성해도 되고 안해도 됩니다(옵션)
raise Exception('hi')

print('hello')
# 결과-에러
----> 1 raise Exception('아무 에러 문구')
2
3 print('hello')

Exception: 아무 에러 문구

1
2
3
4
5
6
7
8
9
10
# 보통 이런식으로 조건문과 같이 사용합니다
b = 1
a = [1,2,3]

if b not in a:
raise Exception('a에 없는 값이라서 에러 발생 시킬게요.')

print('hello')
# 출력 결과
hello
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
b = 5
a = [1,2,3]

if b not in a:
raise Exception('a에 없는 값이라서 에러 발생 시킬게요.')

print('hello')

# 출력 결과
4 if b not in a:
----> 5 raise Exception('a에 없는 값이라서 에러 발생 시킬게요.')
6
7 print('hello')

Exception: a에 없는 값이라서 에러 발생 시킬게요.

Try, Except 사용 방법

  • try는 에러가 발생하더라도 그냥 작업을 진행하게 만들고 싶을 때 많이 사용됩니다.
  • except뒤 에 발생되는 [에러 이름] 그 뒤에 처리를 어떻게 할지 사용
  • 에러가 나와도 그냥 pass를 원하면 pass 입력
  • 예시를 보면 바로 이해되실 겁니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 숫자 2개를 나눌때 나오는 에러 테스트입니다.
try:
a, b = map(int,input('숫자 2개를 띄어쓰기를 사용해서 입력해주세요 : ').split())
print(a / b)

except ZeroDivisionError: # 숫자를 0으로 나눠서 에러가 발생했을 때 실행됨
print('숫자를 0으로 나눌 수 없습니다.')
except ValueError as a: # input값을 제대로 입력하지 않으면 실행
print('잘못된 입력입니다', a)
pass
print('hi')
# 결과
숫자 2개를 띄어쓰기를 사용해서 입력해주세요 : 3 1
3.0
hi

# 결과(zerodivision)
숫자 2개를 띄어쓰기를 사용해서 입력해주세요 : 3 0
숫자를 0으로 나눌 수 없습니다.

# 결과(valueeroor)
숫자 2개를 띄어쓰기를 사용해서 입력해주세요 : 3abd
잘못된 입력입니다 invalid literal for int() with base 10: '3abd'
hi
  • 만약 어떤 에러인지 모르는 경우 테스트를하여 에러를 확인한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a, b = map(int,input('숫자 2개를 띄어쓰기를 사용해서 입력해주세요 : ').split())
print(a / b)

# '3 0'을 입력할 경우 'ZeroDivisionError'
<ipython-input-65-a03c397788a2> in <module>
1 a, b = map(int,input('숫자 2개를 띄어쓰기를 사용해서 입력해주세요 : ').split())
----> 2 print(a / b)

ZeroDivisionError: division by zero

# '3abd'을 입력할 경우 'ValueError'
----> 1 a, b = map(int,input('숫자 2개를 띄어쓰기를 사용해서 입력해주세요 : ').split())
2 print(a / b)

ValueError: invalid literal for int() with base 10: '3abd'

파이썬 에러 생성 및 처리 방법(assert, raise, try)

http://inhwancho.github.io/2023/01/05/Study_folder/Basic_study/2023-01-05-assert/

Author

InhwanCho

Posted on

2023-01-05

Updated on

2023-01-05

Licensed under

Comments