μμΈ(Exception)λ νλ‘κ·Έλ¨ μ€ν μ€ λ°μν μ μλ μμμΉ λͺ»ν λ¬Έμ λλ μ€λ₯ μνμ μλ―Ένλ€. μμΈκ° λ°μνλ©΄ νλ‘κ·Έλ¨μ μ€λ¨λκΈ° λλ¬Έμ μ΄λ₯Ό μ μ νκ² μ²λ¦¬νμ¬ μ€λ¨μ λ°©μ§νκ±°λ μ€λ₯μ λν μ 보λ₯Ό μ¬μ©μμκ² μ 곡ν΄μΌνλ€.

print(10 / 3)
print(4 / 2)
> print(5 / 0) ZeroDivisionError: division by zero
# νμ΄μ¬μ μλ¬κ° λλ©΄ μλ¬ μ΄νλ₯Ό μ€ννμ§ μμ
μμΈ μ²λ¦¬μ κΈ°λ³Έ ꡬ쑰λ λ€μκ³Ό κ°λ€.
try:
# μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ μ½λ
except ExceptionType1: # 'ExceptionType1'μλ μ€μ μμΈ μ νμ΄ λ€μ΄κ°λλ€.
# ExceptionType1 μμΈκ° λ°μνμ λ μ€νλ μ½λ
except ExceptionType2: # 'ExceptionType2'μλ λ€λ₯Έ μμΈ μ νμ΄ λ€μ΄κ°λλ€.
# ExceptionType2 μμΈκ° λ°μνμ λ μ€νλ μ½λ
# μΆκ°μ μΈ except λΈλ‘μ κ³μ μΆκ°ν μ μμ΅λλ€.
else:
# try λΈλ‘μμ μμΈκ° λ°μνμ§ μμμ λ μ€νλ μ½λ
finally:
# μμΈ λ°μ μ¬λΆμ κ΄κ³μμ΄ νμ μ€νλ μ½λ
try:
print(10 / 3)
print(5 / 0)
print(4 / 2)
except:
print('πΉ: μμΈ λ°μ!!')
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.') # μμΈ λ°μνλ©΄ exceptλ‘ λμ΄κ° λ€ κ·Έλ₯ λ°μΌλ‘ μ§νλ¨
> 3.3333333333333335
> πΉ: μμΈ λ°μ!!
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
try:
print(10 / 3)
print(5 / 0)
print(4 / 2)
except ZeroDivisionError: # ν΄λΉ μλ¬μ λν΄μλ§ μ²λ¦¬
print('0μΌλ‘ λλ μ μμ΅λλ€.')
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.')
> 3.3333333333333335
> 0μΌλ‘ λλ μ μμ΅λλ€.
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
try:
data = [10, 20, 30, 40, 50]
print(data[0])
# print(int('μΌ'))
# μ²λ¦¬ν΄μ€ μ μλ except κ΅¬λ¬Έμ΄ μκΈ° λλ¬Έμ μλ¬ λ°μ ν νλ‘κ·Έλ¨ μ’
λ£
print(5 / 0)
print(data[5])
print(data[3])
except IndexError:
print('μΈλ±μ€ μ§μ μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.')
except ZeroDivisionError:
print('0μΌλ‘ λλ μ μμ΅λλ€.')
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.')
> 10
> 0μΌλ‘ λλ μ μμ΅λλ€.
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
try:
data = [10, 20, 30, 40, 50]
print(data[0])
print(int('μΌ'))
print(5 / 0)
print(data[5])
print(data[3])
except:
print('πΉ: μμΈ λ°μ!!')
# except IndexError:
#print('μΈλ±μ€ μ§μ μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.')
# except ZeroDivisionError:
# print('0μΌλ‘ λλ μ μμ΅λλ€.')
# SyntaxError: default 'except:' must be last
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.')
> 10
> πΉ: μμΈ λ°μ!!
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
try:
data = [10, 20, 30, 40, 50]
print(data[0])
print(int('μΌ'))
print(5 / 0)
print(data[5])
print(data[3])
except IndexError:
print('μΈλ±μ€ μ§μ μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.')
except ZeroDivisionError:
print('0μΌλ‘ λλ μ μμ΅λλ€.')
except:
print('πΉ: μμΈ λ°μ!!')
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.')
> 10
> πΉ: μμΈ λ°μ!!
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
try:
data = [10, 20, 30, 40, 50]
print(data[5])
print(int('μΌ'))
print(5 / 0)
print(data[3])
except IndexError as e:
print(e) # μ€λ₯ μ μ¬μ©μκ° μ§μ ν λ¬Έμ₯μ΄ μλ νμ΄μ¬ κΈ°λ³Έ μ€λ₯ λ©μΈμ§κ° λμ€κ² νκΈ°
except ZeroDivisionError as e:
print(e) # μ΄μ°¨νΌ μ€λ₯λ νλμ΄κΈ° λλ¬Έμ eλ₯Ό μ€λ³΅μΌλ‘ μ¬μ©ν΄λ λ¨
except Exception as e: # λͺ¨λ μ€λ₯λͺ
μ λν λΆλͺ¨ ν΄λμ€
print(e)
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.')
> list index out of range
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
try:
data = [10, 20, 30, 40, 50]
print(data[0])
except IndexError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print(e)
else:
print('μλ¬κ° λ°μνμ§ μμ μ μμ μΈ νλ‘κ·Έλ¨μΌ λ μΆλ ₯')
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.')
> μλ¬κ° λ°μνμ§ μμ μ μμ μΈ νλ‘κ·Έλ¨μΌ λ μΆλ ₯
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
try:
data = [10, 20, 30, 40, 50]
print(data[0])
print(data[5])
except IndexError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print(e)
else:
print('μλ¬κ° λ°μνμ§ μμ μ μμ μΈ νλ‘κ·Έλ¨μΌ λ μΆλ ₯') # μλ¬κ° μμΌλ©΄ μΆλ ₯ X
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.')
> 10
> list index out of range
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
try:
data = [10, 20, 30, 40, 50]
print(data[0])
except IndexError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print(e)
else:
print('μλ¬κ° λ°μνμ§ μμ μ μμ μΈ νλ‘κ·Έλ¨μΌ λ μΆλ ₯')
finally:
print('μ€λ₯μ κ΄κ³μμ΄ λ¬΄μ‘°κ±΄ μ€νλλ λ¬Έμ₯')
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.')
> 10
> μλ¬κ° λ°μνμ§ μμ μ μμ μΈ νλ‘κ·Έλ¨μΌ λ μΆλ ₯
> μ€λ₯μ κ΄κ³μμ΄ λ¬΄μ‘°κ±΄ μ€νλλ λ¬Έμ₯
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
try:
data = [10, 20, 30, 40, 50]
print(data[0])
print(data[5])
except IndexError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print(e)
else:
print('μλ¬κ° λ°μνμ§ μμ μ μμ μΈ νλ‘κ·Έλ¨μΌ λ μΆλ ₯')
finally:
print('μ€λ₯μ κ΄κ³μμ΄ λ¬΄μ‘°κ±΄ μ€νλλ λ¬Έμ₯') # dbλ λ€νΈμν¬ μμ
μ λ°λ³΅ν λ λ§μ§λ§ printμ λ€λ₯΄κ² μ¬μ©ν μΌμ΄ μμ μ μμ
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.')
> 10
> list index out of range
> μ€λ₯μ κ΄κ³μμ΄ λ¬΄μ‘°κ±΄ μ€νλλ λ¬Έμ₯
> νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.
Exception ν΄λμ€λ νμ΄μ¬μ λ΄μ₯ μμΈ κ³μΈ΅ ꡬ쑰μμ κ±°μ λͺ¨λ λ΄μ₯ μμΈμ κΈ°λ³Έ ν΄λμ€μ΄λ€. μ΄ ν΄λμ€λ μ¬μ©μ μ μ μμΈλ₯Ό λ§λ€κ±°λ νΉμ μμΈ μ νμ μ‘κΈ° μν κΈ°λ³Έμ μΈ μΈν°νμ΄μ€λ₯Ό μ 곡νλ€.
try:
raise Exception('μμΈ λ°μ') # μμΈ λ§λ¦
except Exception as e:
print(e)
> μμΈ λ°μ
def func1():
n = int(input('μ§μλ₯Ό μ
λ ₯νμΈμ: '))
if n % 2 == 1:
raise Exception('νμλ₯Ό μ
λ ₯νμ΄μ')
print(n)
try:
func1()
except Exception as e:
print('πΉ: μμΈ λ°μ!!!', e)
> μ§μλ₯Ό μ
λ ₯νμΈμ: 3
> πΉ: μμΈ λ°μ!!! νμλ₯Ό μ
λ ₯νμ΄μ
def func1():
func2()
def func2():
func3()
def func3():
print('%d' % 'λ¬Έμμ΄')
> TypeError: %d format: a real number is required, not str
# ν¨μκ° λ°λ‘ μ€νλμ§λ μκΈ° λλ¬Έμ μμμλ μλ¬κ° μλλ€.
try:
func1()
except TypeError:
print('νμ
μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.')
> νμ
μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.
def func1():
try:
func2()
except TypeError:
print('νμ
μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.')
def func2():
func3()
def func3():
print('%d' % 'λ¬Έμμ΄')
func1()
> νμ
μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.
def func1():
func2()
def func2():
try:
func3()
except TypeError:
print('νμ
μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.')
def func3():
print('%d' % 'λ¬Έμμ΄')
func1()
> νμ
μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.
def func1():
func2()
def func2():
func3()
def func3():
try:
print('%d' % 'λ¬Έμμ΄')
except TypeError:
print('νμ
μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.')
func1()
# μλ¬ μ²λ¦¬ ꡬ문μ μ΄λμ λ€μ΄κ°λ μ§ μκ΄μ΄ μλ€.
> νμ
μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.
π‘ 4. μ¬μ©μ μ μ μμΈ ν΄λμ€λ₯Ό μ§μ λ§λ€κ³ νμ©νκΈ°
# 20μ΄ λ―Έλ§: λμ΄ λ²μλ³΄λ€ μ΄λ¦Ό
# 20μ΄ ~ 50μ΄: λμ΄ λ²μ μμ ν¬ν¨
# 50μ΄ μ΄κ³Ό: λμ΄ λ²μλ³΄λ€ νΌ
class AgeLimitError(Exception):
def __init__(self, age, message='μνλ λμ΄ λ²μκ° μλ'): # λ©μΈμ§μ κΈ°λ³Έκ° μ€μ ν¨
self.age = age
self.message = message
super().__init__(self.message) # Exception ν΄λμ€μ λ©μΈμ§ 보λ (Exception(message))
def check_age(age):
if age < 20:
raise AgeLimitError(age, 'λμ΄ λ²μλ³΄λ€ μ΄λ¦Ό')
elif age > 50:
raise AgeLimitError(age, 'λμ΄ λ²μλ³΄λ€ νΌ')
else:
return 'λμ΄ λ²μ μμ ν¬ν¨'
ages = [17, 60, 46, 20, 52, 26]
for age in ages:
try:
print(check_age(age))
except AgeLimitError as e:
print(f'{e.age} λμ΄ μλ¬: {e}')
> 17 λμ΄ μλ¬: λμ΄ λ²μλ³΄λ€ μ΄λ¦Ό
> 60 λμ΄ μλ¬: λμ΄ λ²μλ³΄λ€ νΌ
> λμ΄ λ²μ μμ ν¬ν¨
> λμ΄ λ²μ μμ ν¬ν¨
> 52 λμ΄ μλ¬: λμ΄ λ²μλ³΄λ€ νΌ
> λμ΄ λ²μ μμ ν¬ν¨