μμΈ μ²λ¦¬λ νλ‘κ·Έλλ°μμ νμμ μΈ μμμ λλ€. μ½λλ₯Ό μμ±ν λ λ°μν μ μλ μκΈ°μΉ μμ μν©μ λλΉνλ κ²μ μμ μ±κ³Ό μ λ’°μ±μ λμ΄λ λ° μ€μν μν μ ν©λλ€. μ΄λ² κΈμμλ pythonμμμ μμΈ μ²λ¦¬μ λν΄ μμΈν μμλ³΄κ² μ΅λλ€.
β£ λͺ©μ°¨
1. μμΈμ μ’ λ₯πΆ
βΆ SyntaxError: νμ΄μ¬ μ½λκ° μ¬λ°λ₯Έ λ¬Έλ²μ λ§μ§ μμ λ°μνλ μ€λ₯μ λλ€.
print('test) # λ°μ΄νκ° λ«νμ§ μμ
print('Hello')) # κ΄νΈκ° ν μ λ λ§μ
βΆ NameError: μ μλμ§ μμ λ³μλ₯Ό μ°Έμ‘°νλ €κ³ ν λ λ°μνλ μ€λ₯μ
λλ€.
a = 10
b = 15
print(c)
βΆ ZeroDivisionError : 0μΌλ‘ λλλ €κ³ ν λ λ°μνλ μ€λ₯μ
λλ€.
print(10 / 0)
βΆIndex Error: μνμ€μ λ²μλ₯Ό λ²μ΄λ μΈλ±μ€λ₯Ό μ¬μ©νλ €κ³ ν λ λ°μνλ μ€λ₯μ
λλ€.
x = [1, 2, 3]
print(x[3])
βΆKeyError: μ‘΄μ¬νμ§ μλ ν€λ₯Ό λμ λ리μμ μ°Έμ‘°νλ €κ³ ν λ λ°μνλ μ€λ₯μ λλ€.
dic = {'name':'νκΈΈλ', 'age':20}
print(dic['hobby']) # μλ¬
print(dic.get('hobby')) # μλ¬ μλκ³ Noneμ λ°ν
βΆValueError: ν¨μλ μ°μ°μ μ λ¬λ μΈμμ κ°μ΄ μ ν¨νμ§ μμ λ λ°μνλ μ€λ₯μ λλ€.
x = [1, 4, 10]
x.remove(100) # κ° 100 μ κ±° -> μ€λ₯
βΆTypeError: μλͺ»λ μλ£νμΌλ‘ μνλ μ°μ°μ΄λ ν¨μ νΈμΆλ‘ μΈν΄ λ°μνλ μ€λ₯μ λλ€.
x = [1, 2] # 리μ€νΈ
y = (1, 2) # νν
z = 'Hello' # λ¬Έμμ΄
print(x + y + z) # μλ‘ λ€λ₯Έ μλ£νμ΄κΈ° λλ¬Έμ μ±λ¦½ μ λ¨
2. λͺ¨λ μμΈ μ²λ¦¬ (try - except)π―
try-except λ¬Έμ μμΈ μ²λ¦¬λ₯Ό μν νμ΄μ¬μ κΈ°λ³Έμ μΈ κ΅¬λ¬Έμ λλ€. μ΄ κ΅¬λ¬Έμ μμΈκ° λ°μν μ μλ μ½λ λΈλ‘μ try λΈλ‘ μμ λ£κ³ , μμΈκ° λ°μνμ λ μ²λ¦¬ν μ½λλ₯Ό except λΈλ‘μ λ£μ΅λλ€. try λΈλ‘ λ΄μμ μμΈκ° λ°μνλ©΄ νμ΄μ¬μ ν΄λΉ μμΈλ₯Ό μ²λ¦¬νκΈ° μν΄ except λΈλ‘μΌλ‘ μ΄λν©λλ€. try-except ꡬ문μ μ¬μ©νλ©΄ μμΈκ° λ°μν μ μλ λΆλΆμ κ°μΈμ νλ‘κ·Έλ¨μ΄ μ€λ¨λλ κ²μ λ°©μ§ν μ μμ΅λλ€. μμΈκ° λ°μνλ©΄ νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’ λ£λλ κ²μ λ§κ³ , λμ μ μ¬μ©μκ° μ΄ν΄νκΈ° μ¬μ΄ μ€λ₯ λ©μμ§λ₯Ό μΆλ ₯ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, νμΌμ μ΄ λ ν΄λΉ νμΌμ΄ μ‘΄μ¬νμ§ μλ κ²½μ°μ λλΉνμ¬ try-except ꡬ문μ μ¬μ©ν μ μμ΅λλ€. try λΈλ‘μμ νμΌμ μ΄λ €κ³ μλνκ³ , νμΌμ΄ μ‘΄μ¬νμ§ μμΌλ©΄ λ°μνλ FileNotFoundError μμΈλ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
try:
with open('nonexistent_file.txt', 'r') as file:
content = file.read()
print("νμΌ λ΄μ©:", content)
except FileNotFoundError:
print("νμΌμ μ°Ύμ μ μμ΅λλ€.")
μ΄λ κ² νλ©΄ νλ‘κ·Έλ¨μ΄ FileNotFoundErrorλ₯Ό λ°μμν€μ§ μκ³ μμΈλ₯Ό μ²λ¦¬νμ¬ νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’
λ£λμ§ μμ΅λλ€. λμ μ νμΌμ μ°Ύμ μ μλ€λ λ©μμ§λ₯Ό μ¬μ©μμκ² λ³΄μ¬μ€ μ μμ΅λλ€.
try:
num = int(input('μ μλ₯Ό μ
λ ₯νμΈμ: '))
print('μμ λ°μ§λ¦: {}'.format(num))
print('μμ λλ : {}'.format(num * 3.14 * 2))
print('μμ λμ΄: {}'.format(num * num * 3.14))
except:
print('μ
λ ₯ν κ°μ΄ μ¬λ°λ₯Έ μ μκ° μλλλ€.')
μ μ½λλ μ¬μ©μλ‘λΆν° μ μλ₯Ό μ
λ ₯λ°μ μμ λ°μ§λ¦μΌλ‘ μ¬μ©νκ³ , μ΄λ₯Ό μ΄μ©νμ¬ μμ λλ μ λμ΄λ₯Ό κ³μ°νμ¬ μΆλ ₯νλ μμ μ
λλ€. μ¬μ©μκ° μ¬λ°λ₯΄μ§ μμ κ°μ μ
λ ₯ν κ²½μ° νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’
λ£λμ§ μκ³ , λμ μ μ€λ₯ λ©μμ§λ₯Ό μΆλ ₯νμ¬ μ¬μ©μμκ² μ μ ν μλ΄λ₯Ό μ 곡ν©λλ€.
try:
height = input('ν€λ₯Ό μ
λ ₯νμΈμ >>> ')
height = round(height) # λ°μ¬λ¦Ό ν¨μμ λ¬Έμμ΄μ΄ μ λ¬λμ΄ μμΈ λ°μ
print('μ
λ ₯νμ ν€λ {}cmλ‘ μ²λ¦¬λ©λλ€.'.format(height))
except:
print('μ
λ ₯ν κ°μ νμμ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€.')
μ μ½λλ μ¬μ©μλ‘λΆν° ν€λ₯Ό μ
λ ₯λ°μ μμμ μ΄νλ₯Ό λ°μ¬λ¦Όνμ¬ μ²λ¦¬νλ μμ μ
λλ€. μ΄ μ½λλ₯Ό μ€νν λ μ¬μ©μκ° μ«μκ° μλ κ°μ μ
λ ₯νλ©΄ νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’
λ£λμ§ μκ³ , λμ μ μμΈκ° μ²λ¦¬λμ΄ μ€λ₯ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
except λΈλ‘μμ μμΈ κ°μ²΄λ₯Ό λ°μμ¨ ν, ν΄λΉ κ°μ²΄λ₯Ό μΆλ ₯νκ±°λ κ·Έ μμ ν¬ν¨λ μ 보λ₯Ό νμ©ν¨μΌλ‘μ¨ μμΈ λ©μμ§λ₯Ό μ²λ¦¬ν μλ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμΈ κ°μ²΄ μμ μλ λ©μμ§κ° μΆλ ₯λμ΄ ν΄λΉ μμΈκ° μ΄λ€ λ΄μ©μΌλ‘ λ°μνλμ§ νμ
ν μ μμ΅λλ€.
a = [10, 20, 30, 40, 50]
try:
print(a[10])
except IndexError as e:
# μμΈ κ°μ²΄ eμ λ΄μ©μ μΆλ ₯
print("μμΈ λ©μμ§:", e)
3.νΉμ μμΈ μ²λ¦¬π¦
νΉμ μμΈλ§ μ²λ¦¬νλ λ°©μμ expect λΈλ‘μ μ¬μ©νμ¬ κ°κ°μ μμΈμ λν΄ λ³λλ‘ μ²λ¦¬νλ κ²μ λλ€. μ΄ λ°©μμ μ¬μ©νλ©΄ κ°κ°μ μμΈμ λν΄ κ΅¬μ²΄μ μΌλ‘ μ²λ¦¬ν μ μμ΄ κ°λ μ±μ΄ λμμ§κ³ , μ½λμ μ μ§λ³΄μμ±λ μ’μμ§λλ€.
try:
a = int(input('μ μλ₯Ό μ
λ ₯νμΈμ: '))
b = int(input('νΌμ μλ₯Ό μ
λ ₯νμΈμ: '))
result = a / b
print('{} / {} = {}'.format(a, b, result))
except ZeroDivisionError:
print('0μΌλ‘ λλ μ μμ΅λλ€.')
except ValueError:
print('μ μλ§ μ
λ ₯ν μ μμ΅λλ€.')
μλ₯Ό λ€μ΄, νμ΄μ¬μμ 0μΌλ‘ λλλ κ²½μ° ZeroDivisionError μ μ μλ‘ λ³νν μ μλ κ²½μ° ValueErrorμ λν΄ κ°κ° λ€λ₯Έ λ©μμ§λ₯Ό μΆλ ₯νκ³ μ νλ€λ©΄, λ€μκ³Ό κ°μ΄ μ½λλ₯Ό μμ±ν μ μμ΅λλ€. μ΄λ κ² νλ©΄ ZeroDivisionErrorκ° λ°μνλ©΄ "0μΌλ‘ λλ μ μμ΅λλ€."κ° μΆλ ₯λκ³ , ValueErrorκ° λ°μνλ©΄ "μ μλ§ μ
λ ₯ν μ μμ΅λλ€."κ° μΆλ ₯λ©λλ€. λ€λ₯Έ μμΈκ° λ°μν κ²½μ°λ μ΄ except λΈλ‘μ ν΄λΉνμ§ μμΌλ―λ‘ ν΄λΉ μμΈλ μμ λΈλ‘μμ μ²λ¦¬λ©λλ€.
4. else λ¬Έκ³Ό finallyλ¬Έπ¦
elseμ finally λΈλ‘μ μμΈ μ²λ¦¬μ μ¬μ©λλ λ κ°μ§ 보쑰 λΈλ‘μ λλ€.
βΆelse λΈλ‘:
- try λΈλ‘ μμ μ½λκ° μμΈλ₯Ό λ°μμν€μ§ μμμ λ μ€νλλ λΈλ‘μ λλ€.
- μ΄λ€ μμΈλ λ°μνμ§ μμμ λ μ€νν μ½λλ₯Ό else λΈλ‘μ μμ±ν©λλ€.
- elseλ λ°λμ except λ€μ μ¬μ©ν΄μΌ ν©λλ€.
βΆfinally λΈλ‘:
- try λΈλ‘ μμ μ½λ μ€ν μ¬λΆμ κ΄κ³μμ΄ νμ μ€νλλ λΈλ‘μ λλ€.
- μ£Όλ‘ λ¦¬μμ€λ₯Ό μ 리νκ±°λ μ 리 μ½λλ₯Ό μ€ννλ λ° μ¬μ©λ©λλ€.
- tryλ λ¨λ μΌλ‘ μ¬μ©ν μ μμΌλ©°, λ°λμ except λλ finally ꡬ문과 ν¨κ» μ¬μ©ν΄μΌ ν©λλ€.
try: # μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ μ½λ
filename = input('μ΄κ³ μ νλ νμΌλͺ
μ μ
λ ₯νμΈμ >>> ')
file = open(filename,'rt') # νμΌ μ΄κΈ°
except FileNotFoundError: # μμΈκ° λ°μνμ λ μ€ν
print('{} νμΌμ΄ μ‘΄μ¬νμ§ μμ΅λλ€.'.format(filename))
else: # μμΈκ° λ°μνμ§ μμμ λ (μ μμ )
buffer = file.read()
print(buffer)
file.close() # νμΌ λ«κΈ°
finally:
print('νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€!')
try λΈλ‘ μμλ μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ μ½λκ° λ€μ΄κ°λλ€. μ΄ κ²½μ° μ¬μ©μλ‘λΆν° νμΌλͺ
μ μ
λ ₯λ°κ³ , ν΄λΉ νμΌμ μ΄λ €κ³ μλν©λλ€. except FileNotFoundError λ νμΌμ μ°Ύμ μ μλ κ²½μ° λ°μνλ μμΈλ₯Ό μ²λ¦¬ν©λλ€. μ΄ κ²½μ° νμΌμ΄ μ‘΄μ¬νμ§ μλλ€λ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€. else λΈλ‘μ μμΈκ° λ°μνμ§ μμμ λ μ€ν΄μ€λλ λΈλ‘μ
λλ€. νμΌμ μ±κ³΅μ μΌλ‘ μ΄μλ€λ©΄ νμΌμ λ΄μ©μ μ½κ³ μΆλ ₯ν©λλ€. κ·Έλ¦¬κ³ νμΌμ λ«μ΅λλ€. finally λΈλ‘μ μμΈ μ¬λΆμ κ΄κ³μμ΄ νμ μ€νλλ λΈλ‘μ
λλ€. νλ‘κ·Έλ¨μ΄ μ’
λ£λκΈ° μ μ μ€νλλ©°, μ¬κΈ°μλ "νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€!" λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
5. κ°μ λ‘ μμΈ λ°μμν€κΈ°π²
κ°μ λ‘ μμΈλ₯Ό λ°μμν€λ κ²μ νλ‘κ·Έλλ¨Έκ° μ½λμ νΉμ μν©μμ μμΈλ₯Ό λ°μμν€λ κ²μ λ§ν©λλ€. μ΄λ νλ‘κ·Έλ¨μ νΉμ μ‘°κ±΄μ΄ μΆ©μ‘±λμ§ μμκ±°λ μμμΉ λͺ»ν λ¬Έμ κ° λ°μνμ λ, λͺ
μμ μΌλ‘ μμΈλ₯Ό λ°μμμΌ μ΄λ₯Ό μ²λ¦¬ν μ μλλ‘ νλ λ°©λ²μ
λλ€. νμ΄μ¬μμλ raise ν€μλλ₯Ό μ¬μ©νμ¬ μμΈλ₯Ό κ°μ λ‘ λ°μμν¬ μ μμ΅λλ€. raise ν€μλλ λ€μκ³Ό κ°μ΄ μ¬μ©λ©λλ€.
raise μμΈν΄λμ€(μμΈλ©μμ§)
μ¬κΈ°μ μμΈν΄λμ€λ λ°μμν€κ³ μ νλ μμΈμ ν΄λμ€λ₯Ό λνλ΄λ©° μμΈλ©μΈμ§λ λ°μν μμΈμ λν μ€λͺ
μ ν¬ν¨ν λ¬Έμμ΄μ
λλ€. μλ₯Ό λ€μ΄, μ¬μ©μλ‘λΆν° μ
λ ₯μ λ°μ μμκ° μ
λ ₯λμμ λ μμΈλ₯Ό λ°μμν€λ κ²½μ°λ₯Ό μκ°ν΄ λ΄
μλ€. μ΄λ ValueError μμΈλ₯Ό λ°μμν€κ³ μ¬μ©μμκ² μμλ₯Ό μ
λ ₯νμ§ λ§λΌλ λ©μμ§λ₯Ό μΆλ ₯ν μ μμ΅λλ€.
num = int(input("μμλ₯Ό μ
λ ₯νμΈμ: "))
if num < 0:
raise ValueError("μμλ μ
λ ₯ν μ μμ΅λλ€.")
μ΄λ κ² νλ©΄ μ¬μ©μκ° μμλ₯Ό μ
λ ₯ν κ²½μ° ValueError μμΈκ° λ°μνλ©°, ν΄λΉ μμΈμλ "μμλ μ
λ ₯ν μ μμ΅λλ€."λΌλ λ©μΈμ§κ° ν¬ν¨λ©λλ€. μ΄λ¬ν λ°©μμ μ¬μ©νλ©΄ νλ‘κ·Έλ¨μ΄ μμμΉ λͺ»ν 쑰건μ μ§λ©΄νμ λ, ν΄λΉ μν©μ λͺ
ννκ² μ²λ¦¬ν μ μμ΅λλ€.
pass ν€μλλ μμΈ μ²λ¦¬μμ μ£Όλ‘ μ¬μ©λλ©°, νΉμ μμΈκ° λ°μνμ λ μλ¬΄λ° λμμ νμ§ μκ³ κ·Έλ₯ λμ΄κ°λ μν μ ν©λλ€. μμΈ μ²λ¦¬ ꡬ문μμλ νΉμ μμΈμ λν μ²λ¦¬ μ½λλ₯Ό μμ±ν΄μΌ νμ§λ§, λλ‘λ μμ§ ν΄λΉ μμΈλ₯Ό μ²λ¦¬ν ꡬ체μ μΈ λ΄μ©μ΄ μμ λκ° μμ΅λλ€. μ΄λ° κ²½μ°μ passλ₯Ό μ¬μ©νμ¬ ν΄λΉ μμΈλ₯Ό λμ΄κ°κ³ λ€μ μ½λλ₯Ό μ€νν©λλ€. μ΄λ κ² ν¨μΌλ‘μ¨ νλ‘κ·Έλ¨μ΄ λ©μΆμ§ μκ³ κ³μ μ€νλ μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ μμΈ μ²λ¦¬ ꡬ문μμ passλ₯Ό μ¬μ©ν μ μμ΅λλ€.
try:
# μ΄λ€ μμ
μ μλ
except SomeException:
# μμ§ μ²λ¦¬ν λ΄μ©μ΄ μμ λ passλ₯Ό μ¬μ©νμ¬ μμΈλ₯Ό 무μνκ³ λ€μ μ½λλ₯Ό μ€νν¨
pass
μ μ½λμμλ SomeException μ΄ λ°μνμ λ μλ¬΄λ° μ²λ¦¬λ₯Ό νμ§ μκ³ κ·Έλ₯ λμ΄κ°λ μν μ ν©λλ€. μ΄λ₯Ό ν΅ν΄ μμΈ μ²λ¦¬ μ½λλ₯Ό λμ€μ ꡬνν μ μμΌλ©°, μΌμμ μΌλ‘ μμΈλ₯Ό 무μνκ³ μ ν λ μ¬μ©λ©λλ€. λ°λΌμ κ°μ λ‘ μμΈλ₯Ό λ°μμν€λ λΆλΆμμ pass ν€μλλ μμ§ μ²λ¦¬ν μμΈ μν©μ΄ μμ λ μ¬μ©ν μ μλ λ°©λ² μ€ νλμ
λλ€.
6. μ¬μ©μ μμΈ ν΄λμ€π
μ¬μ©μ μ μ μμΈ ν΄λμ€λ νμ΄μ¬μμ κΈ°μ‘΄ μμΈ ν΄λμ€λ₯Ό νμ₯νκ±°λ μλ‘μ΄ μμΈ ν΄λμ€λ₯Ό μ μνλ κ²μ λ§ν©λλ€. μ΄λ₯Ό ν΅ν΄ νλ‘κ·Έλλ¨Έλ μμ λ§μ μμΈ μ νμ μ μνκ³ , νλ‘κ·Έλ¨μμ ν΄λΉ μμΈλ₯Ό λ°μμν¬ μ μμ΅λλ€. μ¬μ©μ μ μ μμΈ ν΄λμ€λ₯Ό μ μνλ μ£Όμ λͺ©μ μ νλ‘κ·Έλ¨μ κ°λ
μ±κ³Ό μ μ§ λ³΄μμ±μ ν₯μν€λ λ° μμ΅λλ€.
μ¬μ©μ μ μ μμΈ ν΄λμ€λ₯Ό μ μνλ €λ©΄ νμ΄μ¬μ λ΄μ₯ μμΈ ν΄λμ€λ₯Ό μμλ°μ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±ν©λλ€. μΌλ°μ μΌλ‘ μμΈ ν΄λμ€ μ΄λ¦μ Exception ν΄λμ€λ₯Ό μμλ°μ΅λλ€. μ¬μ©μ μ μ μμΈ ν΄λμ€λ λ€μκ³Ό κ°μ λ°©μμΌλ‘ μ μλ©λλ€.
class CustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
μ μ½λμμ CustomError λΌλ μ¬μ©μ μ μ μμΈ ν΄λμ€λ₯Ό μ μνκ³ μμ΅λλ€. μ΄ ν΄λμ€λ λ΄μ₯ μμΈ ν΄λμ€μΈ Exceptionμ μμλ°μ΅λλ€. κ·Έλ¦¬κ³ __init__ λ©μλλ₯Ό μ€λ²λΌμ΄λνμ¬ μ¬μ©μ μ μ μμΈ κ°μ²΄λ₯Ό μμ±ν λ λ©μμ§λ₯Ό λ°λλ‘ κ΅¬ννκ³ μμ΅λλ€. μ΄λ¬ν ꡬνμ ν΅ν΄ μ¬μ©μλ μμΈ κ°μ²΄λ₯Ό μμ±ν λ λ©μμ§λ₯Ό ν¨κ» μ λ¬ν μ μμ΅λλ€.
μ¬μ©μ μ μ μμΈ ν΄λμ€λ₯Ό μ¬μ©νλ μμλ λ€μκ³Ό κ°μ΅λλ€.
class CustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
try:
raise CustomError("μ¬μ©μ μ μ μμΈκ° λ°μνμ΅λλ€.")
except CustomError as e:
print("λ°μν μμΈ λ©μμ§:", e.message)
μ μ½λμμ CustomError μμΈλ₯Ό λ°μμν€κ³ , κ·Έ μμΈλ₯Ό except λΈλ‘μμ μ‘μμ μ²λ¦¬νκ³ μμ΅λλ€. μ΄λ κ² νλ©΄ νλ‘κ·Έλλ¨Έκ° μ μν μμΈ ν΄λμ€λ₯Ό μ¬μ©νμ¬ μμΈλ₯Ό λ°μμν€κ³ , κ·Έμ λ°λ₯Έ μ²λ¦¬λ₯Ό ν μ μκ² λ©λλ€.
7. ν΅μ¬λ΄μ©π