(Python 5-1๊ฐ) File / Exception / Log Handling
210804
Exception
์์ธ์๋ ์์์ด ๊ฐ๋ฅํ๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ๋ค.
์์ ๊ฐ๋ฅํ ์์ธ
๋ฐ์ ์ฌ๋ถ๋ฅผ ์ฌ์ ์ ์ธ์งํ ์ ์๋ ์์ธ
์ฌ์ฉ์์ ์๋ชป๋ ์ ๋ ฅ, ํ์ผ ํธ์ถ ์ ํ์ผ ์์
๊ฐ๋ฐ์๊ฐ ๋ฐ๋์ ๋ช ์์ ์ผ๋ก ์ ์ ํด์ผํจ
์์ ๋ถ๊ฐ๋ฅํ ์์ธ
์ธํฐํ๋ฆฌํฐ ๊ณผ์ ์์ ๋ฐ์ํ๋ ์์ธ, ๊ฐ๋ฐ์ ์ค์
๋ฆฌ์คํธ์ ๋ฒ์๋ฅผ ๋์ด๊ฐ๋ ๊ฐ ํธ์ถ, ์ ์ 0์ผ๋ก ๋๋
์ํ ๋ถ๊ฐ์ ์ธํฐํ๋ฆฌํฐ๊ฐ ์๋ ํธ์ถใ
์์์ด ๊ฐ๋ฅํ๋ฉด if๋ฌธ์ผ๋ก ์กฐ๊ฑด์ ๋ฌ์์ฃผ๋ฉด ๋๋ค. ์์์ด ๋ถ๊ฐ๋ฅ ํ๋ค๋ฉด? => Exception Handling
Exception Handling
try - except ๋ฌธ๋ฒ
try-except-finally ๋ฌธ๋ฒ
Exception์ ์ข ๋ฅ
Built-in Exception: ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ์์ธ
IndexError : List์ Index ๋ฒ์ ์ด๊ณผ
NameError : ์กด์ฌํ์ง ์๋ ๋ณ์ ํธ์ถ
ZeroDivisionError : 0์ผ๋ก ์ซ์๋ฅผ ๋๋ ๋
Value Error : ๋ณํํ ์ ์๋ ๋ฌธ์/์ซ์ ๋ณํํ ๋
FileNotFoundError : ์กด์ฌํ์ง ์๋ ํ์ผ์ ํธ์ถํ ๋
๊ทธ ์ธ์๋ ์ ๊ณต๋๋ ์์ธ๊ฐ ๊ต์ฅํ ๋ง๋ค
์์ธ ์ ๋ณด ํ์ํ๊ธฐ
raise ๊ตฌ๋ฌธ
ํ์์ ๋ฐ๋ผ ๊ฐ์ ๋ก Exception์ ๋ฐ์์ํจ๋ค.
assert ๊ตฌ๋ฌธ
ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ ๊ฒฝ์ฐ ์์ธ ๋ฐ์
File Handling
ํ์ผ์ ์ข ๋ฅ
๊ธฐ๋ณธ์ ์ธ ํ์ผ ์ข ๋ฅ๋ก๋ text ํ์ผ๊ณผ binary ํ์ผ๋ก ๋๋๋ค.
๋ชจ๋ ํ ์คํธ ํ์ผ๋ ์ค์ ๋ก๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด๋ค.
์ปดํจํฐ๋ ํ ์คํธ ํ์ผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ๋ณํ์ํจ๋ค.
text ํ์ผ
์ธ๊ฐ๋ ์ดํดํ ์ ์๋ ํํ์ธ ๋ฌธ์์ด ํ์์ผ๋ก ์ ์ฅ๋ ํ์ผ
๋ฉ๋ชจ์ฅ์ผ๋ก ์ด๋ฉด ๋ด์ฉ ํ์ธ ๊ฐ๋ฅ
๋ฉ๋ชจ์ฅ์ ์ ์ฅ๋ ํ์ผ, HTML ํ์ผ, ํ์ด์ฌ ์ฝ๋ ํ์ผ ๋ฑ
binary ํ์ผ
์ปดํจํฐ๋ง ์ดํดํ ์ ์๋ ํํ์ธ
์ด์ง(๋ฒ)ํ์์ผ๋ก ์ ์ฅ๋ ํ์ผ
์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ์ฅ์ผ๋ก ์ด๋ฉด
๋ด์ฉ์ด ๊นจ์ ธ ๋ณด์ (๋ฉ๋ชจ์ฅ ํด์ค ๋ถ๊ฐ)
์์ ํ์ผ, ์๋ ํ์ผ ๋ฑ๋ฑ
Python File I/O
w, ์ฐ๊ธฐ๋ชจ๋์ ๊ฒฝ์ฐ encoding ๋ฐฉ์์ utf8๊ณผ cp949 ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ํ ์ ์๋ค. ํ์ ํ ๋๋ ์ด๋ฅผ ํต์ผํ๋๊ฒ ์ข๋ค.
๋, w๋ ๊ธฐ์กด ํ์ผ์ ๋ฎ์ด์ฐ๊ธฐ ๋๋ฌธ์ ์ฃผ์๊ฐ ํ์ํ๋ค.
a, ์ถ๊ฐ๋ชจ๋๋ ๊ธฐ์กด ํ์ผ์ ๋ง์ง๋ง๋ถํฐ ์ด์ด์ ๋ถ์ด๊ฒ ๋๋ค.
Directory ๋ค๋ฃจ๊ธฐ
๋๋ ํ ๋ฆฌ ์์ฑ
๋๋ ํ ๋ฆฌ ์กด์ฌ ์ฌ๋ถ ํ์ธ
๊ฒฝ๋ก ์ฐ๊ฒฐํ๊ธฐ
์ด ๋ ๋ฌธ์์ด๋ก ์ฐ๊ฒฐํ ์๋ ์๋๋ฐ, ๋งฅ๊ณผ ์๋์ฐ๊ฐ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ตฌ๋ถํ๋ ๊ธฐํธ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์
join
์ ๊ถ์ฅํ๋ค.
pathlib ๋ชจ๋์ ์ฌ์ฉํด์ path๋ฅผ ๊ฐ์ฒด๋ก ๋ค๋ฃจ๊ธฐ
ํ์ผ์ด ์กด์ฌํ๋์ง ํ์ธ
Pickle
ํ์ด์ฌ์ ๊ฐ์ฒด๋ฅผ ์์ํ ํ๋ built-in ๊ฐ์ฒด. ๋ฐ์ดํฐ๋ object๋ฑ ์คํ์ค ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์์ ์ฌ์ฉํ ์ ์๋ค. python ์ ์ฉ binary ํ์ผ์ด๋ผ๊ณ ์ดํดํ ์ ์๋ค.
์์ํ๋ ํ์ด์ฌ์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ฅผ ํ์ผ๋ก ์ ์ฅํด์ ์ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
ํผํด ํ์ผ ์์ฑํ๊ธฐ
binary ํ์ผ์ด๋ฏ๋ก 'w' ๋์ 'wb'๋ฅผ ๋ถ์ฌ์คฌ๋ค.
ํผํด ๋ถ๋ฌ์ค๊ธฐ
Loggin Handling
ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ์ผ์ด๋๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ก์ ๋จ๊ธฐ๊ธฐ
์ ์ ์ ์ ๊ทผ, ํ๋ก๊ทธ๋จ์ Exception, ํน์ ํจ์์ ์ฌ์ฉ
Console ํ๋ฉด์ ์ถ๋ ฅ, ํ์ผ์ ๋จ๊ธฐ๊ธฐ, DB์ ๋จ๊ธฐ๊ธฐ ๋ฑ๋ฑ
๊ธฐ๋ก๋ ๋ก๊ทธ๋ฅผ ๋ถ์ํ์ฌ ์๋ฏธ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ถ ํ ์ ์์
์คํ์์ ์์ ๋จ๊ฒจ์ผ ํ๋ ๊ธฐ๋ก, ๊ฐ๋ฐ์์ ์์ ๋จ๊ฒจ์ผํ๋ ๊ธฐ๋ก
logging ๋ชจ๋
logging level
debug : ๊ฐ๋ฐ์ ์ฒ๋ฆฌ ๊ธฐ๋ก์ ๋จ๊ฒจ์ผํ๋ ๋ก๊ทธ ์ ๋ณด๋ฅผ ๋จ๊น
info : ์ฒ๋ฆฌ๊ฐ ์งํ๋๋ ๋์์ ์ ๋ณด๋ฅผ ์๋ฆผ
warning : ์ฌ์ฉ์๊ฐ ์๋ชป ์ ๋ ฅํ ์ ๋ณด๋ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ ์๋ ๊ฐ๋ฐ์ ์๋์น ์๋ ์ ๋ณด๊ฐ ๋ค์ด์์ ๋ ์๋ฆผ
error : ์๋ชป๋ ์ฒ๋ฆฌ๋ก ์ธํด ์๋ฌ๊ฐ ๋ฌ์ผ๋, ํ๋ก๊ทธ๋จ์ ๋์ํ ์ ์์์ ์๋ฆผ.
critical : ์๋ชป๋ ์ฒ๋ฆฌ๋ก ๋ฐ์ดํฐ ์์ค์ด๋ ๋ ์ด์ ํ๋ก๊ทธ๋จ์ด ๋์ํ ์ ์์์ ์๋ฆผ
Logging formmater
Log์ ๊ฒฐ๊ณผ๊ฐ์ ํฌ๋งท์ ์ง์ ํด ์ค ์ ์์
ํ๋ก๊ทธ๋จ ์ค์
๋ฌด์์?
๋ฐ์ดํฐ ํ์ผ ์์น, ํ์ผ ์ ์ฅ ์ฅ์, Operation Type ๋ฑ
์ด๋ป๊ฒ?
configparser : ํ์ผ์
argparser : ์คํ ์์ ์
configparser
ํ๋ก๊ทธ๋จ์ ์คํ ์ค์ ์ file์ ์ ์ฅํจ
Section, Key, Value ๊ฐ์ ํํ๋ก ์ค์ ๋ ์ค์ ํ์ผ์ ์ฌ์ฉ
์ค์ ํ์ผ์ Dict Type์ผ๋ก ํธ์ถํ ์ฌ์ฉ
argparser
Console ์ฐฝ์์ ํ๋ก๊ทธ๋จ ์คํ์ Setting ์ ๋ณด๋ฅผ ์ ์ฅํจ
๊ฑฐ์ ๋ชจ๋ Console ๊ธฐ๋ฐ Python ํ๋ก๊ทธ๋จ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต
ํน์ ๋ชจ๋๋ ๋ง์ด ์กด์ฌํ์ง๋ง(TF), ์ผ๋ฐ์ ์ผ๋ก argparse๋ฅผ ์ฌ์ฉ
Command-Line Option ์ด๋ผ๊ณ ๋ถ๋ฆ
Last updated
Was this helpful?