Created at : 2024-09-02 13:49
Auther: Soo.Y
7. μμΈ μ²λ¦¬ (Exception Handling)
νλ‘κ·Έλλ°μ ν λ, μμμΉ λͺ»ν μ€λ₯κ° λ°μνλ κ²μ νν μΌμ λλ€. μ΄λ¬ν μ€λ₯λ νλ‘κ·Έλ¨μ΄ κ°μμ€λ½κ² μ’ λ£λκ² λ§λ€ μ μμ΅λλ€. νμ΄μ¬μμλ μ΄λ¬ν μ€λ₯λ₯Ό μμΈ(Exception)λΌκ³ νλ©°, μμΈ μ²λ¦¬λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ μμ μ±μ λμΌ μ μμ΅λλ€. μ΄ μ₯μμλ νμ΄μ¬μμ μμΈλ₯Ό μ²λ¦¬νλ λ°©λ²κ³Ό μ¬μ©μ μ μ μμΈλ₯Ό λ€λ£¨λ λ°©λ²μ λ°°μλλ€.
7.1 μμΈμ κΈ°λ³Έ κ°λ
μμΈ(Exception)λ νλ‘κ·Έλ¨ μ€ν μ€μ λ°μνλ μ€λ₯λ₯Ό μλ―Έν©λλ€. μμΈκ° λ°μνλ©΄ νλ‘κ·Έλ¨μ νλ¦μ΄ μ€λ¨λκ³ , μ€λ₯ λ©μμ§κ° μΆλ ₯λ©λλ€. νμ§λ§ μμΈλ₯Ό μ μ νκ² μ²λ¦¬νλ©΄ νλ‘κ·Έλ¨μ΄ μ’ λ£λμ§ μκ³ κ³μ μ€νλ μ μμ΅λλ€.
- κΈ°λ³Έ μμΈ λ°μ:
x = 10 / 0 # ZeroDivisionError λ°μ
μ μ½λλ ZeroDivisionError
μμΈλ₯Ό λ°μμν΅λλ€. 0μΌλ‘ λλλ μ°μ°μ νμ©λμ§ μκΈ° λλ¬Έμ
λλ€.
7.2 try
μ except
λ₯Ό μ¬μ©ν μμΈ μ²λ¦¬
νμ΄μ¬μμλ try
μ except
λΈλ‘μ μ¬μ©νμ¬ μμΈλ₯Ό μ²λ¦¬ν μ μμ΅λλ€. try
λΈλ‘ μμ μμΈκ° λ°μν μ μλ μ½λλ₯Ό μμ±νκ³ , except
λΈλ‘ μμ μμΈκ° λ°μνμ λ μ€νν μ½λλ₯Ό μμ±ν©λλ€.
- 기본 ꡬ쑰:
try:
μ€νν _μ½λ
except μμΈνμ
:
μμΈκ°_λ°μνμ_λ_μ€νν _μ½λ
- μμ :
try:
x = 10 / 0
except ZeroDivisionError:
print("0μΌλ‘ λλ μ μμ΅λλ€.")
μ΄ μ½λλ ZeroDivisionError
μμΈκ° λ°μν λ β0μΌλ‘ λλ μ μμ΅λλ€.βλΌλ λ©μμ§λ₯Ό μΆλ ₯νκ³ , νλ‘κ·Έλ¨μ΄ μ μμ μΌλ‘ μ’
λ£λλλ‘ ν©λλ€.
7.3 μ¬λ¬ μμΈ μ²λ¦¬
νλμ try
λΈλ‘μ λν΄ μ¬λ¬ κ°μ except
λΈλ‘μ μ¬μ©νμ¬ μλ‘ λ€λ₯Έ μμΈλ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
- μμ
try:
x = int(input("μ«μλ₯Ό μ
λ ₯νμΈμ: "))
y = 10 / x
except ValueError:
print("μ ν¨ν μ«μλ₯Ό μ
λ ₯νμΈμ.")
except ZeroDivisionError:
print("0μΌλ‘ λλ μ μμ΅λλ€.")
μ΄ μμ μμλ μ¬μ©μκ° μ«μκ° μλ κ°μ μ λ ₯νμ λμ, 0μ μ λ ₯νμ λ κ°κ°μ μμΈλ₯Ό μ²λ¦¬ν©λλ€.
7.4 λͺ¨λ μμΈ μ²λ¦¬
λͺ¨λ μμΈλ₯Ό ν¬κ΄μ μΌλ‘ μ²λ¦¬νκ³ μΆμ λλ except
λΈλ‘μ μμΈ νμ
μ λͺ
μνμ§ μκ³ μ¬μ©ν μ μμ΅λλ€.
- μμ
try:
x = int(input("μ«μλ₯Ό μ
λ ₯νμΈμ: "))
y = 10 / x
except:
print("μμΈκ° λ°μνμ΅λλ€.")
μ΄ μ½λμμλ μ΄λ€ μμΈκ° λ°μνλλΌλ βμμΈκ° λ°μνμ΅λλ€.βλΌλ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
7.5 else
μ finally
λΈλ‘
νμ΄μ¬μμλ try
μ except
λΈλ‘κ³Ό ν¨κ» else
μ finally
λΈλ‘μ μ¬μ©ν μ μμ΅λλ€.
-
else
λΈλ‘:try
λΈλ‘μμ μμΈκ° λ°μνμ§ μμμ λ μ€νλ©λλ€. -
finally
λΈλ‘: μμΈ λ°μ μ¬λΆμ μκ΄μμ΄ νμ μ€νλ©λλ€. νμΌ λ«κΈ°μ κ°μ μ 리 μμ μ μ μ©ν©λλ€. -
μμ :
try:
x = int(input("μ«μλ₯Ό μ
λ ₯νμΈμ: "))
y = 10 / x
except ZeroDivisionError:
print("0μΌλ‘ λλ μ μμ΅λλ€.")
except ValueError:
print("μ ν¨ν μ«μλ₯Ό μ
λ ₯νμΈμ.")
else:
print(f"κ²°κ³Όλ {y}μ
λλ€.")
finally:
print("νλ‘κ·Έλ¨μ΄ μ’
λ£λμμ΅λλ€.")
μ΄ μμ μμ else
λΈλ‘μ μμΈκ° λ°μνμ§ μμμ λλ§ μ€νλλ©°, finally
λΈλ‘μ νμ μ€νλ©λλ€.
7.6 μμΈ κ°μ²΄
μμΈκ° λ°μνλ©΄ μμΈ κ°μ²΄κ° μμ±λ©λλ€. μμΈ κ°μ²΄μλ μ€λ₯ λ©μμ§μ κ°μ μ 보λ₯Ό λ΄κ³ μμΌλ©°, except
λΈλ‘μμ μ΄λ₯Ό νμ©ν μ μμ΅λλ€.
- μμ :
try:
x = int(input("μ«μλ₯Ό μ
λ ₯νμΈμ: "))
y = 10 / x
except Exception as e:
print(f"μμΈκ° λ°μνμ΅λλ€: {e}")
μ΄ μ½λμμλ μμΈ κ°μ²΄ e
λ₯Ό μ¬μ©νμ¬ λ°μν μμΈμ λν ꡬ체μ μΈ μ 보λ₯Ό μΆλ ₯ν©λλ€.
7.7 μ¬μ©μ μ μ μμΈ
κΈ°λ³Έ μμΈ μΈμλ, νλ‘κ·Έλ¨μ μꡬμ λ§λ μ¬μ©μ μ μ μμΈλ₯Ό λ§λ€ μ μμ΅λλ€. μ¬μ©μ μ μ μμΈλ κΈ°λ³Έμ μΌλ‘ Exception
ν΄λμ€λ₯Ό μμλ°μ μ μν©λλ€.
- μμ :
class NegativeNumberError(Exception):
pass
def check_positive(number):
if number < 0:
raise NegativeNumberError("μμλ νμ©λμ§ μμ΅λλ€.")
try:
num = int(input("μμλ₯Ό μ
λ ₯νμΈμ: "))
check_positive(num)
except NegativeNumberError as e:
print(e)
μ΄ μμ μμλ NegativeNumberError
λΌλ μ¬μ©μ μ μ μμΈλ₯Ό μ μνκ³ , μμλ₯Ό μ
λ ₯νμ λ μμΈλ₯Ό λ°μμν΅λλ€.
7.8 μμΈ μ²λ¦¬μ μ€μμ±
μμΈ μ²λ¦¬λ νλ‘κ·Έλ¨μ μμ μ±μ λμ΄λ λ° λ§€μ° μ€μν©λλ€. μμΈ μ²λ¦¬λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ΄ μμμΉ λͺ»ν μν©μμλ μ μ νκ² λμ²ν μ μμΌλ©°, μ¬μ©μμκ² μ μ©ν μ€λ₯ λ©μμ§λ₯Ό μ 곡νκ³ , νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’ λ£λλ κ²μ λ°©μ§ν μ μμ΅λλ€.
- μμΈ μ²λ¦¬μ ν¨κ³Ό:
- νλ‘κ·Έλ¨μ μ λ’°μ± ν₯μ: μμΈκ° λ°μν΄λ νλ‘κ·Έλ¨μ΄ κ°μμ€λ½κ² μ’ λ£λμ§ μκ³ , μ ν΄μ§ λλ‘ μ²λ¦¬λλλ‘ ν μ μμ΅λλ€.
- μ μ κ²½ν κ°μ : μ¬μ©μκ° μ€λ₯λ₯Ό κ²ͺμ λ, μλ―Έ μλ μ€λ₯ λ©μμ§λ₯Ό μ 곡νμ¬ λ¬Έμ λ₯Ό μ΄ν΄νκ³ ν΄κ²°ν μ μκ² λμ΅λλ€.
- λλ²κΉ μ©μ΄μ± μ¦κ°: μμΈ κ°μ²΄λ₯Ό νμ©νμ¬ μ νν μ€λ₯ μμΈμ νμ νκ³ , μ½λλ₯Ό κ°μ ν μ μμ΅λλ€.
μ΄μ νμ΄μ¬μμ μμΈ μ²λ¦¬μ κ°λ κ³Ό μ¬μ© λ°©λ²μ λν΄ μ΄ν΄νκ² λμμ΅λλ€. μμΈ μ²λ¦¬λ₯Ό ν΅ν΄ λμ± κ²¬κ³ νκ³ μ λ’°ν μ μλ νλ‘κ·Έλ¨μ μμ±ν μ μμ΅λλ€.