[Week 1-5] ๐ŸPython ์˜ˆ์™ธ์ฒ˜๋ฆฌ, ํŒŒ์ผ ์ž…์ถœ๋ ฅ

Jadeยท2021๋…„ 1์›” 22์ผ
0

๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech

๋ชฉ๋ก ๋ณด๊ธฐ
5/54

1์ฃผ์ฐจ ๊ธˆ์š”์ผ

  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ
  • ํŒŒ์ผ ์ž…์ถœ๋ ฅ

๐Ÿ“[์˜ˆ์™ธ์ฒ˜๋ฆฌ]

์˜ค๋ฅ˜(์•„ํ”„๋‹ค)
์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์ž˜๋ชป ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฃฝ์ด์ง€ ์•Š๊ณ  ์˜ˆ์™ธ(Exception)๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ํŒŒ์ด์ฌ์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ ค๋ฉด try / except ๊ตฌ๋ฌธ์„ ์ด์šฉํ•œ๋‹ค.

  • try
    ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ(์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ฝ”๋“œ)๋ฅผ ๋„ฃ๋Š”๋‹ค.
  • except
    ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ๋Œ€์‹  ์‹คํ–‰๋  ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š”๋‹ค.

  • raise
    ์˜๋„์ ์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์ž˜๋ชป๋œ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋Š” ๋“ฑ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ„์† ์‹คํ–‰ํ•  ์ด์œ ๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์—์„œ ๋ฐ˜๋ณต์„ ์ค‘๋‹จํ•˜๊ณ  ์ƒˆ๋กœ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์“ฐ๊ธฐ๋„ ํ•œ๋‹ค.

try:
    n1, n2 = map(int,input().split())
    print(n1/n2)
    # n2๊ฐ€ 0์ผ ๊ฒฝ์šฐ ZeroDivisionError๊ฐ€ ๋ฐœ์ƒํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ์–ด์•ผ ํ•˜์ง€๋งŒ

except ZeroDivisionError: # ํŠน์ • ์˜ค๋ฅ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    print("you can't divide by 0.")

except: # ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์€ ๋ชจ๋“  ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ๋™์ž‘ํ•œ๋‹ค.
    print("an error occured.")
    # try/except๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์•ˆ ์ฃฝ๊ณ  except ๋‚ด์˜ ๋ฌธ์žฅ์„ ์‹คํ–‰ํ•œ๋‹ค.

>>> 10 0
    you can't divide by 0.
    
>>> a b
    an error occured.

  • assert
    ๋””๋ฒ„๊น…์ด๋‚˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋“ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์–ด๋–ค ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์กฐ๊ฑด์ด ๋งž์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. assert๋ฌธ์€ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด์„œ๋ณด๋‹ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž์‹ ์ด ์ง  ์ฝ”๋“œ๊ฐ€ ์˜๋„๋Œ€๋กœ ๋Œ์•„๊ฐ€๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ์“ฐ์ธ๋‹ค.
def func(var):
    # blabla
    return res

assert func('abc') == 3 # 3์€ func('abc')๋ฅผ ๋Œ๋ ธ์„ ๋•Œ ๋‚˜์™€์•ผ ํ•˜๋Š” ๊ฒฐ๊ณผ

์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์˜๋„(์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” 3)์™€ ๊ฐ™์œผ๋ฉด ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ , ๋‹ค๋ฅด๋ฉด AssertionError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


๐Ÿ“[ํŒŒ์ผ ์ž…์ถœ๋ ฅ]

ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ text ํŒŒ์ผ๊ณผ binary ํŒŒ์ผ ๋‘ ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”๋ชจ์žฅ์œผ๋กœ ์—ด ์ˆ˜ ์žˆ์œผ๋ฉด ํ…์ŠคํŠธ ํŒŒ์ผ์ด๊ณ , ์—ด์—ˆ์„ ๋•Œ ๊นจ์ง€๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ด๋‹ค.

  • ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ
    open, close๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŒŒ์ผ์„ ์—ด๊ณ  > ์ฒ˜๋ฆฌํ•  ๊ฑฐ ๋‹ค ํ•˜๊ณ  > ํŒŒ์ผ์„ ๋‹ซ๋Š”๋‹ค.
    with๋ฌธ์œผ๋กœ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํŒŒ์ผ ์—ด๊ณ  ๋‹ซ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ๋œ๋‹ค.
    ํŒŒ์ผ์„ ์—ด ๋•Œ๋Š” ํŒŒ์ผ ์ฒ˜๋ฆฌ ๋ชจ๋“œ๋ฅผ ์ •ํ•ด์„œ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ,
    r(๋ฎ์–ด์“ฐ๊ธฐ),w(์ฝ๊ธฐ ์ „์šฉ),a(์ด์–ด์„œ ์“ฐ๊ธฐ) 3๊ฐ€์ง€ ๋ชจ๋“œ๊ฐ€ ์žˆ๋‹ค.
file = open('myText.txt','a') # ํŒŒ์ผ ์—ด๊ธฐ
# blabla
file.close() # ํŒŒ์ผ ๋‹ซ๊ธฐ


with open('myText.txt','a') as file: # ํŒŒ์ผ ์—ด๊ธฐ
    # blabla

# with๋ฌธ์„ ๋‚˜์˜ฌ ๋•Œ ์•Œ์•„์„œ ํŒŒ์ผ๋“ค ๋‹ซ์•„์ค€๋‹ค.

  • pickle
    pickle์€ ํŒŒ์ด์ฌ์— ํŠนํ™”๋œ binary ํŒŒ์ผ์ด๋‹ค. ํ™•์žฅ์ž๋Š” .pickle.
    ํŒŒ์ด์ฌ์—์„œ ๊ฐ์ฒด๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๊ณ , ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋‚ ์•„๊ฐ„๋‹ค. ์ด๋Ÿฐ ๊ฐ์ฒด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ๋‘๊ณ  ๋‚˜์ค‘์— ๋˜ ์“ฐ๊ณ  ์‹ถ์–ด์งˆ ๋•Œ pickle์„ ์ด์šฉํ•œ๋‹ค. ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ ๊ฐ™์€ ๊ฒƒ๋„ pickle ํ˜•ํƒœ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋กœ๊ทธ ์ฒ˜๋ฆฌ
    ์œ ์ €์˜ ์ ‘๊ทผ, ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ, ํŠน์ • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ๊ธฐ๋ก ๋“ฑ ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•ด ๋‘๋ฉด ๋‚˜์ค‘์— ๋ถ„์„ํ•ด์„œ ์˜๋ฏธ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. logging ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด์„œ ๋ ˆ๋ฒจ๋ณ„๋กœ ๋กœ๊ทธ ๋ฉ”์„ธ์ง€๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
    • debug : ๊ฐœ๋ฐœ ๋„์ค‘์˜ ์ฒ˜๋ฆฌ ๊ธฐ๋ก (๋ณ€์ˆ˜ ๋ณ€๊ฒฝ, ๋กœ์ง ๋ณ€๊ฒฝ ๋“ฑ)
    • info : ์‹คํ–‰ ๋„์ค‘์˜ ๊ธฐ๋ก (์„œ๋ฒ„ ์˜คํ”ˆ/์ข…๋ฃŒ, ์œ ์ €์˜ ์ ‘์† ๋“ฑ)
    • warning : ๊ฐœ๋ฐœ ์˜๋„์™€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด์ง€๋งŒ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ (input type์ด ๋‹ฌ๋ž์ง€๋งŒ ํ˜•๋ณ€ํ™˜ ์ฝ”๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธด ํ•˜๋Š” ๋“ฑ)
    • error : ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ž˜๋ชป๋œ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ์˜ˆ์™ธ(exception)๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ (ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ผ์‹œ์ ์œผ๋กœ ์™ธ๋ถ€ ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š๋Š” ๋“ฑ)
    • critical : ์ž˜๋ชป๋œ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ์–ด๋ฒ„๋ฆฌ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ€๋Š” ๊ฒฝ์šฐ (์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ•์ œ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์ ‘๊ทผ์œผ๋กœ ํŒŒ์ผ์ด ์‚ญ์ œ๋˜๋Š” ๋“ฑ)

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ[ํ”ผ์–ด ์„ธ์…˜]

์˜ค์ „ ๊ฐ•์˜์™€ ๋งˆ์Šคํ„ฐ ์„ธ์…˜์—์„œ ๋“ค์€ ์ด์•ผ๊ธฐ๋ฅผ ๋ณต์Šตํ•˜๊ณ  ์ €๋ฒˆ ๊ณผ์ œ์˜€๋˜ morsecode์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด๋‹ค. ์–ด์ œ ํ”ผ์–ด ์„ธ์…˜์—์„œ ์ •๊ทœํ‘œํ˜„์‹ ์ด์•ผ๊ธฐ๋ฅผ ํ–ˆ๋Š”๋ฐ ๊ฐ•์˜์—์„œ๋„ ์ •๊ทœํ‘œํ˜„์‹ ์ด์•ผ๊ธฐ๊ฐ€ ๋‚˜์™€์„œ ๋ฐ˜๊ฐ€์› ๋‹ค.

profile
๋ฐ˜๊ฐ€์›Œ์šฉ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด