๐ [Python] try-except, raise?
try ~ except๋ฌธ
try ~ except
๋ ํ์ด์ฌ์์ ์ฌ์ฉํ๋ ์์ธ ์ฒ๋ฆฌ ๋ฌธ๋ฒ์ด๋ค.
๋น์ทํ ๊ฒฝ์ฐ๋ก๋ java์์ try ~ catch
๊ฐ ์๋ค.
try ~ except
๋ฌธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
try:
์์ธ์ฒ๋ฆฌ ํ๊ณ ์ถ์ ์ฝ๋
except ValueError:
์์ธ์ฒ๋ฆฌ ๋ฐฉ์
์์ธ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์ถ์ ์ฝ๋์๋ ์ผ๋ฐ์ ์ธ ๋ก์ง์ด ๋ค์ด๊ฐ๋ฉด ๋๋ค.
์์ธ์ฒ๋ฆฌ ๋ฐฉ์ ๋ถ๋ถ์๋ ์์ธ๊ฐ ๋ฐ์ํ์ ๋, ์ด๋ค ๋ฉ์์ง ํน์ ๊ฐ ๋ฑ์ ๋ฐํ ์ํฌ์ง ์ ์ผ๋ฉด ๋๋ค.
ErrorList
AssertionError
:ย assertย ๋ฌธ์ด ์ ๋๋ก ์๋ํ์ง ์์ ๋ ๋ฐ์ํ๋ค.IndexError
: ์ฐธ์กฐ ํ๋ ค๋ย ์ธ๋ฑ์ค๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ย ๋ฐ์ํ๋ค.KeyError
: ์ฐธ์กฐ ํ๋ ค๋ย ํค๊ฐ ๊ธฐ์กด ํค ์งํฉ์์ ์ฐพ์ ์ ์์ ๋ย ๋ฐ์ํ๋ค.KeyboardInterrupt
: ์ฌ์ฉ์๊ฐ ์ธํฐ๋ฝํธ ํค(Control + C
, ํน์ยDelete
)๋ฅผ ๋๋ฅผ ๋ ๋ฐ์ํ๋ฉฐ, ๋ชจ๋ Exception์ ์ก๋ ์ฝ๋์ ์ํด ์ธํฐํ๋ฆฌํฐ๊ฐ ์ข ๋ฃํ๋ ๊ฒ์ ๋ง์ง ๋ชปํ๋๋กยException
ย ์์์ ์๋ยBaseException
์ ์ง์ ๊ณ์นํ๋ค.MemoryError
: ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ์ง๋ง, ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ผ๋ถ ๊ฐ์ฒด์ ์ญ์ ๋ฅผ ํจ์ผ๋ก์จ ๋ณต๊ตฌ๋ ์ ์๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.NameError
: ์ฐธ์กฐํ๋ ์ง์ญ, ์ ์ญ ๋ณ์ ํน์ ํจ์, ํด๋์ค ๋ฑ์ ์ฐพ์ ์ ์์ ๋ ๋ฐ์ํ๋ค.OSError
: ์์คํ ํจ์๊ฐย ์์คํ ๊ด๋ จ ์๋ฌ๋ฅผ ๋๋ ค์ค ๋ ๋ฐ์ํ๋ค. (ํ์ผ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ ํน์ ๋์คํฌ ์ฉ๋์ด ์๋ ๊ฒฝ์ฐ)OverflowError
: ์ฐ์ ์ฐ์ฐ์ย ๊ฒฐ๊ณผ๊ฐ ๋๋ฌด ์ปค์ย ํํ ํ ์ ์์ ๋, ํน์ย ์ ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ์ ๋ย ๋ฐ์ํ๋ค.RecursionError
: ์ต๋ย ์ฌ๊ท ๊น์ด๊ฐ ์ด๊ณผํ์์ ๋ ๋ฐ์ํ๋ค.TypeError
: ์ฐ์ฐ์ด๋ ํจ์๊ฐย ๋ถ์ ์ ํ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ฒด์ ์ ์ฉ ๋์์ ๋ ๋ฐ์ํ๋ค.ValueError
: ์ฐ์ฐ์ด๋ ํจ์๊ฐย ๋ถ์ ์ ํ ๊ฐ์ ๊ฐ์งย ๊ฐ์ฒด์ ์ ์ฉ ๋์์ ๋ ๋ฐ์ํ๋ค.ZeroDivisionError
: ๋๋๊ธฐ, ๋๋จธ์ง ์ฐ์ฐ์ย ๋ ๋ฒ์งธ ์ธ์๊ฐ 0์ผ ๋ ๋ฐ์ํ๋ค.
์์ธ ํธ๋ค๋ง ๋ฐฉ๋ฒ?
ํน์ ์๋ฌ๋ง ํธ๋ค๋งํ๋ ๋ฐฉ๋ฒ์ ์๋ฌ ๊ฐ์ฒด์ ์ด๋ฆ์ except ์์ ์์ฑํ๋ฉด ๋๋ค.
- ์)
except ValueError:
๋, ํํ ํํ๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ฐ, ๋ง์ฝ except์ ์์ ์๋ฌด ๊ฒ๋ ์๋ค๋ฉด, ๋๋จธ์ง ๋ชจ๋ ์๋ฌ๋ฅผ ํธ๋ค๋งํ๋ค. โ ์ฃผ์๊ฐ ํ์ํ ๋ฐฉ๋ฒ
- ์)
except (ZeroDivisionError, OverflowError):
๋ง์ฝ ์๋ฌ๋ฅผ ์ ๋ค๋ฆญํ๊ฒ ๋ฐ๊ณ ์ถ์ผ๋ฉด Exception as e
๋ฅผ ์ฌ์ฉํ๋ค.
- ์)
except Exception as e:
๊ทธ๋ผ raise๊ฐ ๋ญ๊น?
raise
๋ ์ธ์์ ์ผ๋ก ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.
raise
๋ ๊ผญ try์ ํจ๊ป ์ฐ์ฌ์ผํ๋ ๊ฒ๋ง์ ์๋๋ค!
๋ง์ฝ try ์ ์ ์ฐ์ธ ๊ฒฝ์ฐ, try์ ์ด ์ ์์ ์ผ๋ก ์ํ๋๋ ๋์ค์ ์์ธ๋ฅผ ์ฐพ์ผ๋ฉด ์ฆ์ ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
์๋๋ try, except, raise์ ์์๋ค.
def three_multiple():
try:
x = int(input('3์ ๋ฐฐ์๋ฅผ ์
๋ ฅํ์ธ์: '))
if x % 3 != 0: # x๊ฐ 3์ ๋ฐฐ์๊ฐ ์๋๋ฉด
raise Exception('3์ ๋ฐฐ์๊ฐ ์๋๋๋ค.') # ์์ธ๋ฅผ ๋ฐ์์ํด
print(x)
except Exception as e: # ํจ์ ์์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํจ
print('three_multiple ํจ์์์ ์์ธ๊ฐ ๋ฐ์ํ์ต๋๋ค.', e)
raise # raise๋ก ํ์ฌ ์์ธ๋ฅผ ๋ค์ ๋ฐ์์์ผ์ ์์ ์ฝ๋ ๋ธ๋ก์ผ๋ก ๋๊น
try:
three_multiple()
except Exception as e: # ํ์ ์ฝ๋ ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํด๋ ์คํ๋จ
print('์คํฌ๋ฆฝํธ ํ์ผ์์ ์์ธ๊ฐ ๋ฐ์ํ์ต๋๋ค.', e)
๋๊ธ๋จ๊ธฐ๊ธฐ