- Today
- Total
μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- κ°λ μ 리
- AI
- νκ²½μΈν
- λ Όλ¦¬μ°μ°μ
- μ»΄ν리ν¨μ
- λ³μ
- ν¨μνμ©
- 1μ£Όμ°¨
- λ°μ΄ν°
- python
- μ£ΌνΌν°λ ΈνΈλΆ
- λμ λ리
- λ°μ΄ν°μ¬μ΄μΈν°μ€νΈ
- κΉνλΈ
- λ°μΈ4κΈ°
- error
- νμ΄μ¬
- λ°μ΄ν°λ² μ΄μ€
- ν¨μ
- data
- λΉκ΅μ°μ°μ
- bigquery
- λͺ¨λμμ°κ΅¬μ
- νμ΄μ¬λ¬Έλ²
- jupyter
- sql
- 2μ£Όμ°¨
- Jupyter Notebook
- github
- λΉ μΏΌλ¦¬
[Python] μμΈ μ²λ¦¬(ꡬ문 μ€λ₯, λ°νμ μλ¬) λ³Έλ¬Έ
π μ€λ₯ μ’ λ₯
error μλ ꡬ문 μ€λ₯ Syntax error μ μμΈ exception λλ λ°νμ μ€λ₯ runtime error κ° μλ€.
μ΄λ κ² κ΅¬λΆλλ κΈ°μ€μ, νλ‘κ·Έλλ° μ€ν μ κ³Ό νλ‘ λλλ€.
π ꡬ문 μ€λ₯ Syntax error
νλ‘κ·Έλλ° μ€ν μ μ λμ€λ μ€λ₯μ λν΄ μμλ³΄κ² λ€.
SyntaxErrorλκΉ π¬ "μ~ μ€ν μ μ μ€λ₯κ° λ°μνꡬλ. ꡬ문 μ€λ₯ꡬλ." λΌκ³ μ μ μλ€.
π¬ “μ½λλ₯Ό μλͺ» μ³€λ€λ λ§”μΈλ° μ΄λμ μλͺ» λκ±°μ§?
File "/tmp/ipykernel_20/138810778.py", line 2
print('μλ
νμΈμ")
^
SyntaxError: EOL while scanning string literal**SyntaxError: EOL while scanning string literal
SyntaxError: EOL while scanning string literal**
line 2 λ²μ§Έ μ€μ, print('μλ νμΈμ") λΆλΆμμ μλ¬κ° λ¬λ€κ³ νλ€.
μ΄λ€ μλ¬μΈμ§ λ΄€λλ, SyntaxError: EOL while scanning string literal λΌκ³ νλ€.
ν΄μν΄λ³΄λ©΄, (gptκ° ν΄μν΄μ€)
λ¬Έμμ΄μ μ λλ‘ λ«μ§ μμμ λ°μνλ μ€λ₯μμ.
λΌκ³ λ΅ν΄μ€λ€.
λ¬Έμμ΄μ λ«μΌλ €λ©΄ “ “ ννμ΄μ΄μΌ νλλ° μ§κΈμ ‘ “ λΌμ μ€λ₯κ° μκ²Όλ€λ κ±Έ μ μ μλ€.
λ€μ " " λ‘ μμ νλ©΄ μλ§κ² μΆλ ₯λλ€.
π μμΈ(Exception) λλ λ°νμ μ€λ₯(Runtime Error)
νλ‘κ·Έλλ° μ€ν ν λμ€λ μ€λ₯λ€μ λν΄ μμλ³΄κ² λ€.
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_20/688360506.py in <module>
1 # μ£Όμμ νκ³ μλ¬λ₯Ό νμΈν΄λ³΄μΈμ.
2 # μλ 리μ€νΈμ μΈλ±μ± β μμΈ
----> 3 list_a[0]
NameError: name 'list_a' is not defined
list_a κ° μ μλμ§ μμλ€κ³ νλ€. π¬μ~ list_aκ° μ μλμ§ μμλλ° μ¬μ©μ΄ λμλ보λ€. μ μΈν΄μΌκ² λ€!
κ·Έλ λ€λ©΄ list_aλ₯Ό μ μΈ ν(=μ μ ν), μλ§κ² μ€νμ΄ λλ€.
μ΄λ° μμΈλ₯Ό ν΄κ²°νλ λͺ¨λ κ²μ π μμΈ μ²λ¦¬(Exceptional Handling) λΌκ³ λΆλ₯Έλ€.
μμΈλ₯Ό μ²λ¦¬νλ λ°©λ²μ λ κ°μ§λ‘ λλλ€.
- 쑰건문 μ¬μ©
- try ꡬ문 μ¬μ©
β κ·Έλ λ€λ©΄ ꡬ문 μ€λ₯λ μ²λ¦¬ λ°©λ²μ΄ μλ?
β ꡬ문 μ€λ₯λ νλ‘κ·Έλλ° μ€ν μ μ μλ¬κ° λλ κ²μ΄κΈ° λλ¬Έμ
μλ¬μ λν μ€λͺ μ ν΅ν΄ μλ§μ μ½λλ‘ μμ νλ λ°©λ²μΌλ‘ μ²λ¦¬ν΄μΌ νλ€.
π μμΈ μ²λ¦¬ (Exception Handling)
- 쑰건문
- try - except ꡬ문
π 쑰건문
num = (input("λλ μ«μλ₯Ό μ
λ ₯νμΈμ: "))
if num.isdigit():
print(int(num))
elif num.lstrip("-").isdigit():
print(int(num))
else:
print("μ«μκ° μλλλ€.")
π‘ μ€λͺ
- μμΈ (ZeroDivisionError) κ° λ°μν μ μλ μ½λλ₯Ό 쑰건문μΌλ‘ 미리 μ°¨λ¨
π ν¨μ μ 리
- isdigit(): λ¬Έμμ΄μ΄ μ«μμΈμ§ νμΈνλ ν¨μ
- lstrip(): λ²κΈ°κ³ μΆμ λ¬Έμμ΄μ λ²κΈ°λ ν¨μ
π try - except ꡬ문
try:
μμΈκ° λ°μν μ μλ μ½λ
except (λ°μ μ€λ₯ (as λ°μ μ€λ₯ λ³μ)):
μμΈκ° λ°μνμ λ μ€νν μ½λ
π try - except - pass ꡬ문
# try - except - pass ꡬ문
# μλν μ½λ
try:
# μμΈ κ±±μ μμ΄ μ
λ ₯κ°μ float ν¨μλ₯Ό μμ
num = float(input('μλ₯Ό μ
λ ₯νμΈμ : '))
print(f'μ
λ ₯ν μλ {num}μ
λλ€.')
# tryμμ μμΈκ° λ°μνμ λ μ€νν μ½λ
except:
pass
print('λ!')
π₯ 쑰건문 vs try-exceptꡬ문 π₯
π‘μμΈ μ²λ¦¬λ₯Ό νλ λ ꡬ문μ μλλ₯Ό λΉκ΅νλ©΄ try - except κ΅¬λ¬Έμ΄ μ‘°κ±΄λ¬Έλ³΄λ€ μ½κ° λ리λ€.
κ·Έλ¬λ νμ΄μ¬ μμ²΄κ° κ·Έλ κ² μλλ₯Ό μ€μμνλ νλ‘κ·Έλλ° μΈμ΄κ° μλλ―λ‘
μ½λλ₯Ό μ‘°κΈ λ μ½κ² μμ±ν λͺ©μ μ΄λΌλ©΄, β μ‘°κ±΄λ¬Έλ³΄λ€ try - except ꡬ문μ μ¬μ©νλ κ² μ’λ€.
π try - except - else ꡬ문
try - except ꡬ문μ elseλ₯Ό μΆκ°νλ©΄ 'μμΈκ° λ°μνμ§ μμμ λ μ€νν μ½λ'λ₯Ό μ§μ ν μ μλ€.
κΈ°λ³Έ ꡬ쑰λ try - except ꡬ문μ elseλ§ μΆκ°νλ©΄ λλ€.
try:
μμΈκ° λ°μν μ μλ μ½λ
except:
μμΈκ° λ°μνμ λ μ€νν μ½λ
else:
μμΈκ° λ°μνμ§ μμμ λ μ€νν μ½λ
# try - except - else ꡬ문
# μλν μ½λ
try:
# μμΈ κ±±μ μμ΄ μ
λ ₯κ°μ float ν¨μλ₯Ό μμ
num = float(input('μλ₯Ό μ
λ ₯νμΈμ : '))
# tryμμ μμΈκ° λ°μνμ λ μ€νν μ½λ
except:
print('μκ° μλλλ€.')
# tryμμ μμΈκ° λ°μνμ§ μμ λ μ€νν μ½λ
else:
print(f'μ
λ ₯ν μλ {num}μ
λλ€.')
β κ·Έλ°λ° elseκ° μλ try - except ꡬ문과 μ°¨μ΄κ° λ³λ‘ μμ΄ λ³΄μΈλ€. κ·Έλ¬λ©΄ μ else ꡬ문μ μ°λ κ±ΈκΉ?
κ°λ°μμ μ€νμΌμ λ°λΌ else ꡬ문 μ¬μ© μ 무λ μ νμ΄λ€. μ°λ¦¬λ μ½λλ₯Ό μ§λ μΌλΏλ§ μλλΌ λ€λ₯Έ μ¬λμ΄ λ§λ μ½λλ₯Ό μ½κ³ μ΄ν΄ν μ μμ΄μΌ νκΈ° λλ¬Έμ΄λ€. κ·Έλ¬λ―λ‘ β else ꡬ문μ κΈ°μ΅ν΄ λλ, κ°μμ μ€νμΌλλ‘ μ¬μ©νλ©΄ λλ€.
π try - except - else - finally ꡬ문
μμΈκ° λ°μνλ λ°μνμ§ μλ 무쑰건 μ€ννκ³ μΆμ μ½λλ finally ꡬ문μ μ¬μ©νλ©΄ λλ€.
try:
μμΈκ° λ°μν μ μλ μ½λ
except:
μμΈκ° λ°μνμ λ μ€νν μ½λ
else:
μμΈκ° λ°μνμ§ μμμ λ μ€νν μ½λ
finally:
μμΈμ κ΄κ³μμ΄ λ¬΄μ‘°κ±΄ μ€νλλ μ½λ
# try - except - else - finally ꡬ문
# μλν μ½λ
try:
# μμΈ κ±±μ μμ΄ μ
λ ₯κ°μ float ν¨μλ₯Ό μμ
num = float(input('μλ₯Ό μ
λ ₯νμΈμ : '))
# tryμμ μμΈκ° λ°μνμ λ μ€νν μ½λ
except:
print('μκ° μλλλ€.')
# tryμμ μμΈκ° λ°μνμ§ μμλ€λ©΄ μ€νν μ½λ
else:
print(f'μ
λ ₯ν μλ {num}μ
λλ€.')
# finally ꡬ문 μΆκ°
finally:
print('*' * 25)
print('νλ‘κ·Έλ¨μ΄ λλ¬μ΅λλ€.')
π μμΈ μ²λ¦¬ ꡬ문μ κ·μΉπ
tryλ νΌμ μμ μ μλ€. except λλ finally ꡬ문과 ν¨κ» μμ΄μΌ νλ€.
else ꡬ문μ exceptμ ν¨κ» μ°μ΄κ³ , except ꡬ문 λ€μ μ¬μ©ν΄μΌ νλ€.
- try + except
- try + except + else
- try + except + finally
- try + except + else + finally
- try + finally
π μλ¬
πΆraise ν€μλ
νλ‘κ·Έλ¨μ μΌλΆλ¬ μλ¬λ₯Ό λ°μμν¬ μλ μλ€.
μμΈλ₯Ό λ°μμν¬ λλ raiseμ μλ¬λ₯Ό μ§μ νκ³ μλ¬ λ©μμ§λ₯Ό λ£λλ€.
μλ¬ λ©μμ§λ μλ΅ν μ μκΈ° λλ¬Έμ raiseλ§ μ¬μ©ν΄λ μλ¬κ° λ°μνλ€.
νμ΄μ¬μ μλ¬ μ’ λ₯λ λͺ¨λ μλ¬μ μ΄λ¨ΈλμΈ Exception μΈμλ λ€μνλ€.
π μλ¬μ μ’ λ₯ π
- SyntaxError : μλͺ»λ λ¬Έλ² κ΅¬λ¬Έ μ€λ₯μ λλ€.
- NameError : μ°Έμ‘°λ³μ μμ μλ₯Ό λ€λ©΄ μ½λμμ λ³μ aλ₯Ό μΆλ ₯νλλ‘ νλλ°, μ½λ μμμ a μ μΈν μ μ΄ μμ λ λ°μνλ μλ¬μ λλ€. NameError: name 'a' is not defined λΌκ³ λ¨κ³ , μ΄λ¦μ΄ μ μλμ§ μμλ€λ λ»μ λλ€.
- ZeroDivisionError : 0μΌλ‘ λλ μ μμνμ΄μ¬μμ print(10 / 0)μ΄λΌλ μ½λλ 10 λλκΈ° 0 κ°μ μΆλ ₯νλ€λ μλ―Έμ λλ€. λ¬Έλ²μ μΌλ‘λ μλ¬κ° μμ§λ§ λ§μ μ€ννλ©΄ λ°νμ μμ ZeroDivisionError: division by zero λΌλ μ€λ₯ λ©μμ§κ° λΉλλ€.
- IndexError : μΈλ±μ€ λ²μ λ²μ΄λ¨λ¦¬μ€νΈμ μλ μμλ₯Ό νΈμΆν κ²½μ° λ°μνλ μλ¬μ λλ€. IndexError: list index out of range μ κ°μ΄ λ²μλ₯Ό λ²μ΄λ¬λ€λ λ©μμ§κ° λΉλλ€.
- ValueError : μ°Έμ‘° κ°μ΄ μμ. 리μ€νΈμ μλ μμλ₯Ό μ§μ°λ €κ³ νλ©΄ μ μ΄μ κ·Έλ° κ°μ΄ μκΈ° λλ¬Έμ μλ¬κ° λ°μν©λλ€.
- KeyError : ν€ μμ μλ¬ (μ£Όλ‘ λμ λ리 μ¬μ©μ). λμ λ리μ μλ ν€λ₯Ό νΈμΆν λ λ°μνλ μλ¬μ λλ€.
# KeyError
mydict = {'Kim': 1, 'Lee': 2}
print(mydict['Park'])
μ΄λ΄ λ get λ©μλλ₯Ό νμ©νλ©΄ ν΄κ²°λ©λλ€. print(mydict.get('Park'))λΌκ³ μ¨λ³΄λ©΄ Noneμ΄ μΆλ ₯λ©λλ€. ν€κ° μμ κ²½μ° Noneκ°μ΄ λ°νλ©λλ€. κ·Έ λ€μ ν€κ° μμ λ λ°νν κ°μ μ§μ ν΄λμλ λ©λλ€.
- AttributeError : λͺ¨λ, ν΄λμ€μ μλͺ»λ μμ±μ μ¬μ©ν¨. κ³§μ΄μ΄ λ°°μΈ λͺ¨λκ³Ό ν΄λμ€μμ λμ¬ μ μλ μ€λ₯λ‘ λͺ¨λμ μλ ν¨μλ₯Ό μ°λ €κ³ ν λ λμ΅λλ€.
- FileNotFoundError : νμΌ λͺ» μ°Ύμ
ν΄λΉ κ²½λ‘μ νμΌμ΄ μλ€λ©΄ FileNotFoundError: [Errno 2] No such file or directory: 'ex.txt' λΌλ λ©μμ§κ° λΉλλ€. κ·Έλ° νμΌμ΄λ λλ ν 리(ν΄λ)κ° μλ€λ λ»μ λλ€.
- TypeError : νμ μ΄ λ§μ§ μμ
μ°μ° λ±μ ν λ νμ μ΄ μλ‘ λ§μ§ μμ λ λ°μνλ μλ¬μ λλ€. μλ₯Ό λ€μ΄ 리μ€νΈμ λ¬Έμμ΄μ μ°κ²°ν λ λ°μν©λλ€. TypeError: can only concatenate list (not "str") to list λΌκ³ ν΄μ '리μ€νΈλ (λ¬Έμμ΄μ΄ μλ) 리μ€νΈμ κ²°ν©ν μ μμ΅λλ€'λΌλ λ»μ μλ―Έν©λλ€.
μμΈ μ²λ¦¬ μ λ΅ (EAFP vs LBYL)
μ§κΈκΉμ§ μ΄ν΄λ³Έ κ²λ€λ§ ν΄λ μλ¬μ μ’ λ₯κ° μ°Έ λ§μλ°, λ μ΄λμ μ΄λ€ μλ¬κ° λ°μν μ§ λͺ¨λ₯Έλ€. κ·Έλμ μμΈλ₯Ό μ²λ¦¬νκΈ° μν΄ ν¬κ² λκ°μ§ μ λ΅μ μ¬μ©νκ³€ νλ€.
πΆ EAFP: “It’s Easier to Ask Forgiveness than Permission”, 미리 νλ½μ ꡬνλ κ²λ³΄λ€λ λμ€μ μ©μλ₯Ό ꡬνλ κ² μ½λ€λ λ».π
μΌλ¨ νμ μμΈκ° λ°μνμ§ μμ κ²μΌλ‘ κ°μ νκ³ λλ¦λλ‘μ μλ²½ν μ½λ©μ νλ€. κ·Έ ν μ½λ μ€νμ νλλ° λ°νμ μλ¬κ° λ°μνλ€λ©΄, κ·Έλ μμΈμ²λ¦¬ μ½λ©μ νλ κ² μ’λ€λ μ λ΅μ΄λ€. κ·Έλμ μΌλ¨ μν(try)μν€κ³ , λ§μ½ μλ¬κ° λ°μνλ©΄ κ·Έλ μ²λ¦¬(except)νλ€λ μ€νμΌλ‘ μ½λ©νλ€.
πΆ LBYL: “Look Before You Leap”, λμΈ μ리λ₯Ό λ³΄κ³ λ€λ¦¬λ₯Ό λ»μΌλΌλ λ».π
μ΄λ€ μ½λλ₯Ό μ€ννκΈ° μ μ μλ¬κ° λ°μν μ μλ 쑰건μ 미리 λ€ λ°μ Έλ³΄κ³ κ·Έκ±Έ μ΄λ»κ² μ²λ¦¬ν μ§ μ‘°κ±΄λ¬Έ(ifλ¬Έ) μ€νμΌλ‘ μ½λ©νλ μ λ΅μ΄λ€.
π¬ 미리 쑰건μ λ°μ Έλ³΄κ³ μ½λ©νλ, λͺ¨λ μ€λ₯λ₯Ό μμΈ‘νκΈ΄ μ΄λ ΅λ€. λλ¦λλ‘ μλ²½ν μ½λ©ν λ€, λ°νμ μλ¬ λ°μν κ²μ λν΄ μμΈμ²λ¦¬ μ½λ©νλ μ λ΅μ΄ μ§κΈκΉμ§ λ΄κ° μ½λ©νλ λ°©μμ΄λ€. νμ μμΈκ° λ°μνμ§ μμ κ²μλ‘ κ°μ νκ³ μ½λ©νλλΌλ, μμΈ μ²λ¦¬νκ² λλ©΄μ μ½λκ° λν μμ λκΈ°λ νκ³ ,, λλ κΈ°λ³Έμ μΌλ‘ LBYL λ°©μμΌλ‘ μ½λ©νμ§λ§, λΆμ‘±ν λΆλΆμ΄ λ°κ²¬λλ©΄ EAFP λ°©μμ μΆκ°νλ νΌν©ν μ€νμΌμ΄λΌκ³ λ³Ό μ μλ€.π
π―λ€μν μ€λ₯ μ’ λ₯λ€μ νμ΅νμλλ° μ€λ₯λ₯Ό μκΈ°νκΈ° 보λ€λ μ€λ₯λ₯Ό λ§λ¬μ λ μ΄λ»κ² “ν΄κ²°” νλμ§ κ³΅λΆνλ©΄ μ’μ κ² κ°λ€. π€π€
'Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Python] ν΄λμ€, λ©μλ, κ°μ²΄, μμ±μ, μμ±, self (0) | 2025.04.03 |
---|---|
[Python] λͺ¨λ, ν¨ν€μ§, λΌμ΄λΈλ¬λ¦¬ (0) | 2025.04.03 |
[Python] μΌκΈ κ°μ²΄ (0) | 2025.04.02 |
[Python] λλ€, μ»΄ν리ν¨μ (0) | 2025.04.01 |
[Python] 리μ€νΈ, λμ λ리 λ€λ£¨κΈ°2 - λμ λ리, λμ λ리 ν¨μ (0) | 2025.04.01 |