πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[3νŒ€/κΉ€κ·œλ¦¬] 10μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” - μ˜ˆμ™Έμ²˜λ¦¬

kyuree 2023. 6. 1. 23:01

10α„Žα…‘α„‰α…΅_α„‹α…¨α„‹α…¬α„Žα…₯α„…α…΅_α„€α…ͺα„Œα…¦_ᄃᅑᆸᄋᅑᆫ.pdf
0.19MB
10α„Žα…‘α„‰α…΅_ᄀᅑᆼ의ᄋᅑᆫ_α„‹α…¨α„‹α…¬α„Žα…₯α„…α…΅.pdf
10.15MB
10α„Žα…‘α„‰α…΅_α„‹α…¨α„‹α…¬α„Žα…₯α„…α…΅_α„€α…ͺα„Œα…¦.pdf
4.12MB

#1. μ˜ˆμ™Έ 처리

μ˜ˆμ™Έμ˜ κ°œλ…κ³Ό 사둀


  • μ˜ˆμ™Έ 처리(exception handling)
    • μ‹€μ œ ν”„λ‘œκ·Έλž¨ λ§Œλ“€κΈ° μœ„ν•΄ μ•Œμ•„μ•Ό 함
  • μ˜ˆμ™Έ
    • ν”„λ‘œκ·Έλž¨ κ°œλ°œν•˜λ©΄μ„œ μ˜ˆμƒν•˜μ§€ λͺ»ν•œ 상황이 λ°œμƒν•˜λŠ” 것
  • λŒ€ν‘œμ μΈ 사둀
    • μ‚¬μš©μžμ˜ μž…λ ₯ 였λ₯˜
    • μ˜ˆμ‹œ
      • μ›Ήμ‚¬μ΄νŠΈμ— μƒˆλ‘œ κ°€μž…μ„ μœ„ν•΄ 아이디 생성
      • 일반적으둜 아이디 → 영뭊자, 숫자
      • ν•œκΈ€ μž…λ ₯ μ‹œλ„
      • 문제 없이 ν•œκΈ€μ΄ μ €μž₯되면 μ‚¬μš©μžκ°€ 자칫 둜그인 λͺ» ν•  μˆ˜λ„ 있음
  • λ˜λ‹€λ₯Έ 사둀
    • Ms μ˜€ν”ΌμŠ€μ˜ μžλ™ μ €μž₯ κΈ°λŠ₯
    • μž‘μ—… 쀑 μ •μ „ λ“±μ˜ 이유둜 κ°‘μžκΈ° μ’…λ£Œλμ„ λŒ€λ₯Ό λŒ€λΉ„ → μž‘μ—… 쀑간에 μžλ™μœΌλ‘œ μ €μž₯

예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έμ™€ 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έ


  • 예의 μ’…λ₯˜ 두 가지
    • 예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έ
    • 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έ
  • 예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έ
    • λ°œμƒ μ—¬λΆ€λ₯Ό κ°œλ°œμžκ°€ 사전에 인지할 수 μžˆλŠ” μ˜ˆμ™Έ
    • μ˜ˆμ‹œ
      • ‘ν…μŠ€ 트 λ°•μŠ€μ— μ‚¬μš©μžκ°€ μ‹€μˆ˜λ‘œ 잘λͺ»λœ 값을 μž…λ ₯ν•  것 κ°™λ‹€
      • μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” νŒŒμΌμ— μ €μž₯ν•  것 κ°™λ‹€.’
    ⇒ κ°œλ°œμžλŠ” μ˜ˆμ™Έλ₯Ό μ˜ˆμΈ‘ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ μ˜ˆμ™Έκ°€ λ°œμƒν•  λ•ŒλŠ” μ–΄λ–»κ²Œ λŒ€μ‘ν•˜ 라고 λŒ€μ±…μ„ λ§ˆλ ¨ν•΄ 놓을 수 있음
    • μ‚¬μš©μž μž…λ ₯λž€μ— 값이 잘λͺ» μž…λ ₯ → ifλ¬Έ μ‚¬μš©ν•˜μ—¬ 잘λͺ» μž…λ ₯ν–‡λ‹€κ³  응닡
  • 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έ
    • λŒ€ν‘œμ  사둀
      • 맀우 λ§Žμ€ νŒŒμΌμ„ μ²˜λ¦¬ν•  λ•Œ λ¬Έμ œκ°€ λ°œμƒν•  수 있음
      • 5,000개의 파일이 ν•œ 디렉터리에 있고 κ·Έ 파일λͺ…듀을 λ„˜κ²¨ λ°›μ•„ νŒŒμΌμ„ ν•˜λ‚˜μ”© μ½μ–΄λ“€μ΄λŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“¦
      • 그런데 νŒŒμΌμ„ 읽닀가 μ–΄λ–€ 파일 은 μ‹€μ œλ‘œ μ•ˆμ— λ‚΄μš©μ΄ 없을 수 μžˆλŠ”λ°, 이런 κ²½μš°μ—λ„ μ–΄λ–€ 처리λ₯Ό ν•˜μ§€ λͺ»ν•˜κ³  λ„˜μ–΄κ°
      • λ˜λŠ” νŒŒμΌμ„ 읽고 μžˆλŠ”λ° λ‹€λ₯Έ μ‚¬μš©μžμ— μ˜ν•΄ ν•΄λ‹Ή 파일이 μ‚­μ œλ˜μ–΄ μ½μ–΄λ“€μ΄λŠ” μ‹œμ μ— ν•΄λ‹Ή 파 일이 μ‚¬λΌμ§€λŠ” κ²½μš°λ„ λ°œμƒν•  수 있음
      • 이외에도 인덱슀의 λ²”μœ„λ₯Ό λ„˜μ–΄κ°€λŠ” 리슀트의 호좜
      • μ •μˆ˜λ₯Ό 0으둜 λ‚˜λˆ„λŠ” 것 등에 λŒ€ν•œ λ¬Έμ œκ°€ 생길 수 있음
    • 이 경우 → 인터프리터가 μžλ™μœΌλ‘œ 이것이 μ˜ˆμ™ΈλΌκ³  μ‚¬μš©μžμ—κ²Œ μ•Œλ¦Ό
    • λŒ€λΆ€λΆ„μ€ μ΄λŸ¬ν•œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ―€λ‘œ μ μ ˆν•œ 쑰치 ν•΄μ•Ό 함
    • λ‹¨μˆœνžˆ 파일이 μ—†λ‹€κ³  μ•Œλ €μ£ΌλŠ” 것이 μ•„λ‹ˆλΌ 파일이 μ—†κΈ° λ•Œλ¬Έμ— μΆ”κ°€λ‘œ ν•΄μ•Ό ν•˜λŠ” μ‘° 치 있음
    • →그것을 μ˜ˆμ™Έ 처리 ꡬ문에 μΆ”κ°€ν•΄μ•Ό ν•œλ‹€
      • 예λ₯Ό λ“€μ–΄, μ²˜λ¦¬ν•΄μ•Ό ν•  파일이 μ—†λ‹€ λ©΄ 파일이 μ—†λ‹€κ³  기둝을 남기고 λ‹€μŒ νŒŒμΌμ„ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό 함
    • μ˜ˆμ™Έ 처리 μ€‘μš”ν•œ 이유
      • ν”„λ‘œκ·Έλž¨λ„ μΌμ’…μ˜ μ œν’ˆμž„
      • 완성도λ₯Ό λ†’μ΄λŠ” μ°¨μ›μ—μ„œ μ€‘μš”ν•œ κ°œλ…

μ˜ˆμ™Έ 처리 ꡬ문


  • try-exceptλ¬Έ
    • νŒŒμ΄μ¬μ—μ„œ μ˜ˆμ™Έ 처리의 κΈ°λ³Έ 문법
    • μž‘μ„± 방식
    • try: μ˜ˆμ™Έ λ°œμƒ κ°€λŠ₯ μ½”λ“œ except μ˜ˆμ™Έ νƒ€μž…: μ˜ˆμ™Έ λ°œμƒ μ‹œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ

μ‚¬μš© μ˜ˆμ‹œ

  • 0λΆ€ν„° 9κΉŒμ§€ 숫자 → i에 ν•˜λ‚˜μ”© ν• λ‹Ήν•˜λ©° 10으둜 λ‚˜λˆˆ κ°’ 좜λ ₯
for i in range(10): 
		try:
			print(10 / i)
		except ZeroDivisionError:
			print("Not divided by 0")

 

  • 1이 μ•„λ‹Œ 0λΆ€ν„° μ‹œμž‘ → 10을 0으둜 λ‚˜λˆ„λŠ” 계산 κ°€μž₯ λ¨Όμ € μ‹€ν–‰
    • 0으둜 10 λ‚˜λˆŒ 수 μ—†μœΌλ―€λ‘œ μ˜ˆμ™Έ λ°œμƒ
    • μ˜ˆμƒ κ°€λŠ₯ → try문으둜 λŒ€λΉ„
    • ZeroDivisionError
      • 0으둜 λ‚˜λˆ μ§€λŠ” κ²½μš°μ—λŠ” exceptλ¬Έ μ•ˆμœΌλ‘œ λ“€μ–΄κ°€ ν•΄λ‹Ή ꡬ문을 처리
      • print("Not divided by 0")
  • tryλ¬Έ λ‚΄λΆ€ μ˜ˆμ™Έ λ°œμƒ → excpetλ¬Έ μ˜μ—­ μ½”λ“œ μ‹€ν–‰ν•˜κ³  μ’…λ£Œ

 

예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έμ™€ 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έ


  • 예의 μ’…λ₯˜ 두 가지
    • 예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έ
    • 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έ
  • 예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έ
    • λ°œμƒ μ—¬λΆ€λ₯Ό κ°œλ°œμžκ°€ 사전에 인지할 수 μžˆλŠ” μ˜ˆμ™Έ
    • μ˜ˆμ‹œ
      • ‘ν…μŠ€ 트 λ°•μŠ€μ— μ‚¬μš©μžκ°€ μ‹€μˆ˜λ‘œ 잘λͺ»λœ 값을 μž…λ ₯ν•  것 κ°™λ‹€
      • μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” νŒŒμΌμ— μ €μž₯ν•  것 κ°™λ‹€.’
    ⇒ κ°œλ°œμžλŠ” μ˜ˆμ™Έλ₯Ό μ˜ˆμΈ‘ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ μ˜ˆμ™Έκ°€ λ°œμƒν•  λ•ŒλŠ” μ–΄λ–»κ²Œ λŒ€μ‘ν•˜ 라고 λŒ€μ±…μ„ λ§ˆλ ¨ν•΄ 놓을 수 있음
    • μ‚¬μš©μž μž…λ ₯λž€μ— 값이 잘λͺ» μž…λ ₯ → ifλ¬Έ μ‚¬μš©ν•˜μ—¬ 잘λͺ» μž…λ ₯ν–‡λ‹€κ³  응닡
  • 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έ
    • λŒ€ν‘œμ  사둀
      • 맀우 λ§Žμ€ νŒŒμΌμ„ μ²˜λ¦¬ν•  λ•Œ λ¬Έμ œκ°€ λ°œμƒν•  수 있음
      • 5,000개의 파일이 ν•œ 디렉터리에 있고 κ·Έ 파일λͺ…듀을 λ„˜κ²¨ λ°›μ•„ νŒŒμΌμ„ ν•˜λ‚˜μ”© μ½μ–΄λ“€μ΄λŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“¦
      • 그런데 νŒŒμΌμ„ 읽닀가 μ–΄λ–€ 파일 은 μ‹€μ œλ‘œ μ•ˆμ— λ‚΄μš©μ΄ 없을 수 μžˆλŠ”λ°, 이런 κ²½μš°μ—λ„ μ–΄λ–€ 처리λ₯Ό ν•˜μ§€ λͺ»ν•˜κ³  λ„˜μ–΄κ°
      • λ˜λŠ” νŒŒμΌμ„ 읽고 μžˆλŠ”λ° λ‹€λ₯Έ μ‚¬μš©μžμ— μ˜ν•΄ ν•΄λ‹Ή 파일이 μ‚­μ œλ˜μ–΄ μ½μ–΄λ“€μ΄λŠ” μ‹œμ μ— ν•΄λ‹Ή 파 일이 μ‚¬λΌμ§€λŠ” κ²½μš°λ„ λ°œμƒν•  수 있음
      • 이외에도 인덱슀의 λ²”μœ„λ₯Ό λ„˜μ–΄κ°€λŠ” 리슀트의 호좜
      • μ •μˆ˜λ₯Ό 0으둜 λ‚˜λˆ„λŠ” 것 등에 λŒ€ν•œ λ¬Έμ œκ°€ 생길 수 있음
    • 이 경우 → 인터프리터가 μžλ™μœΌλ‘œ 이것이 μ˜ˆμ™ΈλΌκ³  μ‚¬μš©μžμ—κ²Œ μ•Œλ¦Ό
    • λŒ€λΆ€λΆ„μ€ μ΄λŸ¬ν•œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ―€λ‘œ μ μ ˆν•œ 쑰치 ν•΄μ•Ό 함
    • λ‹¨μˆœνžˆ 파일이 μ—†λ‹€κ³  μ•Œλ €μ£ΌλŠ” 것이 μ•„λ‹ˆλΌ 파일이 μ—†κΈ° λ•Œλ¬Έμ— μΆ”κ°€λ‘œ ν•΄μ•Ό ν•˜λŠ” μ‘° 치 있음
    • →그것을 μ˜ˆμ™Έ 처리 ꡬ문에 μΆ”κ°€ν•΄μ•Ό ν•œλ‹€
      • 예λ₯Ό λ“€μ–΄, μ²˜λ¦¬ν•΄μ•Ό ν•  파일이 μ—†λ‹€ λ©΄ 파일이 μ—†λ‹€κ³  기둝을 남기고 λ‹€μŒ νŒŒμΌμ„ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό 함
    • μ˜ˆμ™Έ 처리 μ€‘μš”ν•œ 이유
      • ν”„λ‘œκ·Έλž¨λ„ μΌμ’…μ˜ μ œν’ˆμž„
      • 완성도λ₯Ό λ†’μ΄λŠ” μ°¨μ›μ—μ„œ μ€‘μš”ν•œ κ°œλ…

μ˜ˆμ™Έ 처리 ꡬ문


  • try-exceptλ¬Έ
    • νŒŒμ΄μ¬μ—μ„œ μ˜ˆμ™Έ 처리의 κΈ°λ³Έ 문법
    • μž‘μ„± 방식
    • try: μ˜ˆμ™Έ λ°œμƒ κ°€λŠ₯ μ½”λ“œ except μ˜ˆμ™Έ νƒ€μž…: μ˜ˆμ™Έ λ°œμƒ μ‹œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ

μ‚¬μš© μ˜ˆμ‹œ

  • 0λΆ€ν„° 9κΉŒμ§€ 숫자 → i에 ν•˜λ‚˜μ”© ν• λ‹Ήν•˜λ©° 10으둜 λ‚˜λˆˆ κ°’ 좜λ ₯
for i in range(10): 
		try:
			print(10 / i)
		except ZeroDivisionError:
			print("Not divided by 0")

 

  • 1이 μ•„λ‹Œ 0λΆ€ν„° μ‹œμž‘ → 10을 0으둜 λ‚˜λˆ„λŠ” 계산 κ°€μž₯ λ¨Όμ € μ‹€ν–‰
    • 0으둜 10 λ‚˜λˆŒ 수 μ—†μœΌλ―€λ‘œ μ˜ˆμ™Έ λ°œμƒ
    • μ˜ˆμƒ κ°€λŠ₯ → try문으둜 λŒ€λΉ„
    • ZeroDivisionError
      • 0으둜 λ‚˜λˆ μ§€λŠ” κ²½μš°μ—λŠ” exceptλ¬Έ μ•ˆμœΌλ‘œ λ“€μ–΄κ°€ ν•΄λ‹Ή ꡬ문을 처리
      • print("Not divided by 0")
  • tryλ¬Έ λ‚΄λΆ€ μ˜ˆμ™Έ λ°œμƒ → excpetλ¬Έ μ˜μ—­ μ½”λ“œ μ‹€ν–‰ν•˜κ³  μ’…λ£Œ
  • +) μ˜ˆμ™Έμ˜ μ’…λ₯˜ & μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 메세지
    1. μ˜ˆμ™Έμ˜ μ’…λ₯˜
    • IndexError
      • 리슀트의 인덱슀 λ²”μœ„λ₯Ό λ„˜μ–΄κ°ˆ λ•Œ μ²˜λ¦¬ν•˜λŠ” μ˜ˆμ™Έ
      • μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€ 데이터가 150κ°œμΈμ€„ μ•Œμ•˜λŠ”λ°. 151 κ°œκ°€ μžˆμ–΄ 처리λ₯Ό μš”μ²­ν•˜λŠ” 경우 IndexErrorκ°€ 호좜됨
    • NameError
      • μ½”λ“œμ—μ„œ ν˜ΈμΆœν•˜λŠ” νŠΉλ³„ν•œ λ³€μˆ˜λͺ…이 없을 λ•Œ ν˜ΈμΆœλ˜λŠ” μ—λŸ¬
      • 이 μ–Έμ–΄κ°€ 인터프리터언어이닀 λ³΄λ‹ˆ μ‘΄μž¬ν•˜μ§€ μ•Šμ€ λ³€μˆ˜λ„ μ‹€ν–‰ μ‹œμ μ—μ„œ μž‘μ•„λƒ„
      • 컴파일러 μ–Έμ–΄μ˜ 경우 μ‹€ν–‰ μ „μ΄λ‚˜ 컴파일러 μ‹œμ μ— μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” κ²ƒκ³ΌλŠ” λŒ€μ‘°μ 
    1. μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 메세지

μ‚¬μš© 방법

  • except문의 λ§ˆμ§€λ§‰μ— ‘as e’ λ˜λŠ” ‘as λ³€μˆ˜λͺ…’을 μž…λ ₯ → ν•΄λ‹Ή λ³€μˆ˜λͺ…을 좜λ ₯
  • μ‚¬μš© 방법
for i in range(10):
		try:
			print(10 / i)
		except ZeroDivisionError as e:
			print(e)
			print('Not divided by 0')

 

try-except-else문

  • if-else λ¬Έκ³Ό λΉ„μŠ·
  • ν•΄λ‹Ή μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 경우 μˆ˜ν–‰ν•  μ½”λ“œλ₯Ό else문에 μž‘μ„±ν•˜λ©΄ 됨
  • κΈ°λ³Έ ν˜•νƒœ

 

  • μ½”λ“œ
for i in range(10):
		try:
			result =10 / i
		except ZeroDivisionError:
			print('Not divided by 0')
		else:
			print(10 / i)

 

  • μ—λŸ¬ λ°œμƒν•˜μ§€ μ•ŠλŠ” 경우 μˆ˜ν–‰λ¬Έ μ •μ˜ → μ—λŸ¬ 없어도 일어날 일을 μ‚¬μš©μžκ°€ μ •ν™•νžˆ μ˜ˆμΈ‘ν•  수 μžˆλ‹€λŠ” μž₯점
  • 일반적으둜 많이 μ‚¬μš©λ˜μ§€ μ•ŠμŒ
  • κ°„ν˜Ή μ„œλ²„ μƒνƒœ λΆˆμ•ˆν•΄ μ—°κ²° λŠκΉ€μ΄ 자주 λ°œμƒ → μ—°κ±Έ 됐을 λ•Œ μ²˜λ¦¬ν•  μ½”λ“œ λͺ…ν™•νžˆ ν•˜κΈ°

try-except-finally문

  • try—exceptλ¬Έ μ•ˆμ— μžˆλŠ” μˆ˜ν–‰ μ½”λ“œκ°€ μ•„λ¬΄λŸ° 문제 없이 μ’…λ£Œλ˜μ—ˆμ„ 경우 μ΅œμ’…μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” μ½”λ“œ
  • forλ¬Έμ—μ„œ μ‚¬μš©ν•˜λŠ” finallyλ¬Έκ³Ό μš©λ„κ°€ λΉ„μŠ·
  • κΈ°λ³Έ ν˜•μ‹

 

  • μ‚¬μš© μ˜ˆμ‹œ
try:
		for i in ranged, 10):
			result =10 // i
			print(result)
except ZeroDivisionError:
			print("Not divided by 0")
finally:
		print("μ’…λ£Œλ˜μ—ˆλ‹€.")

 

  • try문이 forλ¬Έ 밖에 μ„ μ–Έλ˜μ–΄ 있고, 두가 1λΆ€ν„° μ‹œμž‘
  • 사싀상 ZeroDivision- Errorκ°€ λ°œμƒν•  수 μ—†λŠ” μ½”λ“œ
  • μ΄λŸ¬ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ except문은 μ‹€ν–‰λ˜μ§€ μ•Šκ³  λ§ˆμ§€ λ§‰μœΌλ‘œ finally문만 μ‹€ν–‰
  • try-except-finally문도 forλ¬Έμ—μ„œ finally문을 μ‚¬μš©ν•˜λŠ” 것 κ³Ό λ™μΌν•˜κ²Œ μ˜ˆμ™Έ λ°œμƒ 여뢀와 상관없이 λ°˜λ“œμ‹œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ

raise

  • ν•„μš”ν•  λ•Œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€λŠ” μ½”λ“œ
  • while True문을 μ‚¬μš©ν•΄ 계속 λ°˜λ³΅λ¬Έμ„ λŒλ €μ•Ό ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•œλ‹€κ³  κ°€μ •
    • μƒλŒ€λ°© 컴퓨터에 계속 무엇인가λ₯Ό μš”μ²­ν•΄μ•Ό ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄κ³ , μš”μ²­ν•  λ•Œλ§ˆλ‹€ λΉ„μš©μ΄ 청ꡬ
    • λ§Œμ•½ μƒλŒ€λ°© 컴퓨터가 κ³ μž₯λ‚˜κ±°λ‚˜ λ¬Έμ œκ°€ 생겨 μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κ²Œ λ˜λŠ” 상황이 λ°œμƒν•œλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?
      • ν”„ λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ μƒλŒ€λ°© μ»΄ν“¨ν„°μ—μ„œ 응닡이 μ—†λ‹€λ©΄ κ°•μ œλ‘œ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ„λ‘ μ˜ˆμ™Έλ₯Ό λ°œμƒ
  • κΈ°λ³Έ ν˜•νƒœ

 

  • μ‚¬μš© μ˜ˆμ‹œ

 

  • μ„€λͺ…
    • while True문으둜 반볡문이 계속 λŒμ•„κ°€λŠ” μƒνƒœμ—μ„œ μ‚¬μš©μžμ—κ²Œ μž…λ ₯을 λ°›μŒ
    • ν•˜μ§€λ§Œ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값이 μˆ«μžκ°€ μ•„λ‹Œ κ²½μš°μ—λŠ” μˆ«μžκ°’μ„ μž…λ ₯ν•˜μ§€ μ•Šμ•˜λ‹€κ³  좜 λ ₯ν•˜λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•˜λŠ” 것을 λͺ©μ μœΌλ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ΄
    • μ΄λ•Œ, μ—λŸ¬μ˜ μ’…λ₯˜λŠ” ValueError둜 μ‚¬μš©μžκ°€ μž…λ ₯을 잘λͺ»ν–ˆμ„ λ•Œ μž…λ ₯이 잘λͺ»λœ 것을 μ•Œλ €μ£Όλ©΄μ„œ μ’…λ£Œ

 

assert문

  • 미리 μ•Œμ•„μ•Ό ν•  μ˜ˆμ™Έ 정보가 쑰건을 λ§Œμ‘±ν•˜μ§€ μ•Šμ„ 경우 μ˜ˆμ™Έλ₯Ό λ°œμƒ
  • μ•žμ—μ„œ ifλ¬Έκ³Ό ν•¨κ»˜ raise문을 μ‚¬μš©ν•˜μ—¬ κ°•μ œλ‘œ μ˜ˆμ™Έλ₯Ό λ°œμƒ
    • assertλ¬Έ → 맀우 κ°„λ‹¨ν•˜κ²Œ μ˜ˆμ™Έλ₯Ό λ°œμƒ
  • True λ˜λŠ” False의 λ°˜ν™˜μ΄ κ°€λŠ₯ν•œ ν•¨μˆ˜λ₯Ό μ‚¬μš©
    • λ§Œμ•½ Falseκ°€ λ°˜ν™˜λ˜λ©΄ μ˜ˆμ™Έκ°€ λ°œμƒ
  • κΈ°λ³Έ ν˜•νƒœ

 

  • γ……μ‚¬μš© μ˜ˆμ‹œ

 

  • μ„€λͺ…
    • 1ν–‰μ—μ„œ get_binary_number() ν•¨μˆ˜λ₯Ό 톡해 μ‹­μ§„μˆ˜λ₯Ό μž…λ ₯λ°›μŒ
    • ν•˜μ§€λ§Œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜ λŠ” μ‚¬μš©μžκ°€ 잘λͺ»λœ 인수argument, 예λ₯Ό λ“€μ–΄ λ¬Έμžμ—΄κ°’μ„ μž…λ ₯ν•  μˆ˜λ„ 있음
    • 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 2ν–‰μ—μ„œ assert문을 μ‚¬μš©
    • isinstance() ν•¨μˆ˜λŠ” μž…λ ₯된 값이 λ‹€μŒμ— λ‚˜μ˜€λŠ” 클래슀 의 μΈμŠ€ν„΄μŠ€μΈμ§€λ₯Ό ν™•μΈν•˜λŠ” ν•¨μˆ˜
    • 이 μ½”λ“œμ—μ„œ decimal_number λ³€μˆ˜κ°€ μ •μˆ˜ν˜• μΈμ§€λŠ” 4γ€œ 5ν–‰μ—μ„œ 확인할 수 있음
  • assert문은 μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 잘λͺ»λœ μž…λ ₯ μ—¬λΆ€λ₯Ό 사전에 ν™•μΈν•˜μ—¬ λ‚˜μ€‘μ— ν•„μš” μ—†λŠ” 연산을 막아주고, κ²°κ΅­ λ‹€λ₯Έ μ‚¬λžŒμ΄ λ§Œλ“  μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 데 쒋은 κ°€μ΄λ“œκ°€ 됨

+) μ˜ˆμ™Έμ˜ μ’…λ₯˜ & μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 메세지

  1. μ˜ˆμ™Έμ˜ μ’…λ₯˜

 

  • IndexError
    • 리슀트의 인덱슀 λ²”μœ„λ₯Ό λ„˜μ–΄κ°ˆ λ•Œ μ²˜λ¦¬ν•˜λŠ” μ˜ˆμ™Έ
    • μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€ 데이터가 150κ°œμΈμ€„ μ•Œμ•˜λŠ”λ°. 151 κ°œκ°€ μžˆμ–΄ 처리λ₯Ό μš”μ²­ν•˜λŠ” 경우 IndexErrorκ°€ 호좜됨
  • NameError
    • μ½”λ“œμ—μ„œ ν˜ΈμΆœν•˜λŠ” νŠΉλ³„ν•œ λ³€μˆ˜λͺ…이 없을 λ•Œ ν˜ΈμΆœλ˜λŠ” μ—λŸ¬
    • 이 μ–Έμ–΄κ°€ 인터프리터언어이닀 λ³΄λ‹ˆ μ‘΄μž¬ν•˜μ§€ μ•Šμ€ λ³€μˆ˜λ„ μ‹€ν–‰ μ‹œμ μ—μ„œ μž‘μ•„λƒ„
    • 컴파일러 μ–Έμ–΄μ˜ 경우 μ‹€ν–‰ μ „μ΄λ‚˜ 컴파일러 μ‹œμ μ— μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” κ²ƒκ³ΌλŠ” λŒ€μ‘°μ 
  1. μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 메세지

μ‚¬μš© 방법

  • except문의 λ§ˆμ§€λ§‰μ— ‘as e’ λ˜λŠ” ‘as λ³€μˆ˜λͺ…’을 μž…λ ₯ → ν•΄λ‹Ή λ³€μˆ˜λͺ…을 좜λ ₯
  • μ‚¬μš© 방법
for i in range(10):
		try:
			print(10 / i)
		except ZeroDivisionError as e:
			print(e)
			print('Not divided by 0')

 

try-except-else문

  • if-else λ¬Έκ³Ό λΉ„μŠ·
  • ν•΄λ‹Ή μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 경우 μˆ˜ν–‰ν•  μ½”λ“œλ₯Ό else문에 μž‘μ„±ν•˜λ©΄ 됨
  • κΈ°λ³Έ ν˜•νƒœ

 

  • μ½”λ“œ
for i in range(10):
		try:
			result =10 / i
		except ZeroDivisionError:
			print('Not divided by 0')
		else:
			print(10 / i)

 

  • μ—λŸ¬ λ°œμƒν•˜μ§€ μ•ŠλŠ” 경우 μˆ˜ν–‰λ¬Έ μ •μ˜ → μ—λŸ¬ 없어도 일어날 일을 μ‚¬μš©μžκ°€ μ •ν™•νžˆ μ˜ˆμΈ‘ν•  수 μžˆλ‹€λŠ” μž₯점
  • 일반적으둜 많이 μ‚¬μš©λ˜μ§€ μ•ŠμŒ
  • κ°„ν˜Ή μ„œλ²„ μƒνƒœ λΆˆμ•ˆν•΄ μ—°κ²° λŠκΉ€μ΄ 자주 λ°œμƒ → μ—°κ±Έ 됐을 λ•Œ μ²˜λ¦¬ν•  μ½”λ“œ λͺ…ν™•νžˆ ν•˜κΈ°

try-except-finally문

  • try—exceptλ¬Έ μ•ˆμ— μžˆλŠ” μˆ˜ν–‰ μ½”λ“œκ°€ μ•„λ¬΄λŸ° 문제 없이 μ’…λ£Œλ˜μ—ˆμ„ 경우 μ΅œμ’…μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” μ½”λ“œ
  • forλ¬Έμ—μ„œ μ‚¬μš©ν•˜λŠ” finallyλ¬Έκ³Ό μš©λ„κ°€ λΉ„μŠ·
  • κΈ°λ³Έ ν˜•μ‹

 

  • μ‚¬μš© μ˜ˆμ‹œ
try:
		for i in ranged, 10):
			result =10 // i
			print(result)
except ZeroDivisionError:
			print("Not divided by 0")
finally:
		print("μ’…λ£Œλ˜μ—ˆλ‹€.")

 

  • try문이 forλ¬Έ 밖에 μ„ μ–Έλ˜μ–΄ 있고, 두가 1λΆ€ν„° μ‹œμž‘
  • 사싀상 ZeroDivision- Errorκ°€ λ°œμƒν•  수 μ—†λŠ” μ½”λ“œ
  • μ΄λŸ¬ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ except문은 μ‹€ν–‰λ˜μ§€ μ•Šκ³  λ§ˆμ§€ λ§‰μœΌλ‘œ finally문만 μ‹€ν–‰
  • try-except-finally문도 forλ¬Έμ—μ„œ finally문을 μ‚¬μš©ν•˜λŠ” 것 κ³Ό λ™μΌν•˜κ²Œ μ˜ˆμ™Έ λ°œμƒ 여뢀와 상관없이 λ°˜λ“œμ‹œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ

raise

  • ν•„μš”ν•  λ•Œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€λŠ” μ½”λ“œ
  • while True문을 μ‚¬μš©ν•΄ 계속 λ°˜λ³΅λ¬Έμ„ λŒλ €μ•Ό ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•œλ‹€κ³  κ°€μ •
    • μƒλŒ€λ°© 컴퓨터에 계속 무엇인가λ₯Ό μš”μ²­ν•΄μ•Ό ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄κ³ , μš”μ²­ν•  λ•Œλ§ˆλ‹€ λΉ„μš©μ΄ 청ꡬ
    • λ§Œμ•½ μƒλŒ€λ°© 컴퓨터가 κ³ μž₯λ‚˜κ±°λ‚˜ λ¬Έμ œκ°€ 생겨 μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κ²Œ λ˜λŠ” 상황이 λ°œμƒν•œλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?
      • ν”„ λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ μƒλŒ€λ°© μ»΄ν“¨ν„°μ—μ„œ 응닡이 μ—†λ‹€λ©΄ κ°•μ œλ‘œ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ„λ‘ μ˜ˆμ™Έλ₯Ό λ°œμƒ
  • κΈ°λ³Έ ν˜•νƒœ

 

  • μ‚¬μš© μ˜ˆμ‹œ

 

  • μ„€λͺ…
    • while True문으둜 반볡문이 계속 λŒμ•„κ°€λŠ” μƒνƒœμ—μ„œ μ‚¬μš©μžμ—κ²Œ μž…λ ₯을 λ°›μŒ
    • ν•˜μ§€λ§Œ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값이 μˆ«μžκ°€ μ•„λ‹Œ κ²½μš°μ—λŠ” μˆ«μžκ°’μ„ μž…λ ₯ν•˜μ§€ μ•Šμ•˜λ‹€κ³  좜 λ ₯ν•˜λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•˜λŠ” 것을 λͺ©μ μœΌλ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ΄
    • μ΄λ•Œ, μ—λŸ¬μ˜ μ’…λ₯˜λŠ” ValueError둜 μ‚¬μš©μžκ°€ μž…λ ₯을 잘λͺ»ν–ˆμ„ λ•Œ μž…λ ₯이 잘λͺ»λœ 것을 μ•Œλ €μ£Όλ©΄μ„œ μ’…λ£Œ

assert문

  • 미리 μ•Œμ•„μ•Ό ν•  μ˜ˆμ™Έ 정보가 쑰건을 λ§Œμ‘±ν•˜μ§€ μ•Šμ„ 경우 μ˜ˆμ™Έλ₯Ό λ°œμƒ
  • μ•žμ—μ„œ ifλ¬Έκ³Ό ν•¨κ»˜ raise문을 μ‚¬μš©ν•˜μ—¬ κ°•μ œλ‘œ μ˜ˆμ™Έλ₯Ό λ°œμƒ
    • assertλ¬Έ → 맀우 κ°„λ‹¨ν•˜κ²Œ μ˜ˆμ™Έλ₯Ό λ°œμƒ
  • True λ˜λŠ” False의 λ°˜ν™˜μ΄ κ°€λŠ₯ν•œ ν•¨μˆ˜λ₯Ό μ‚¬μš©
    • λ§Œμ•½ Falseκ°€ λ°˜ν™˜λ˜λ©΄ μ˜ˆμ™Έκ°€ λ°œμƒ
  • κΈ°λ³Έ ν˜•νƒœ

 

  • μ‚¬μš© μ˜ˆμ‹œ

 

  • μ„€λͺ…
    • 1ν–‰μ—μ„œ get_binary_number() ν•¨μˆ˜λ₯Ό 톡해 μ‹­μ§„μˆ˜λ₯Ό μž…λ ₯λ°›μŒ
    • ν•˜μ§€λ§Œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜ λŠ” μ‚¬μš©μžκ°€ 잘λͺ»λœ 인수argument, 예λ₯Ό λ“€μ–΄ λ¬Έμžμ—΄κ°’μ„ μž…λ ₯ν•  μˆ˜λ„ 있음
    • 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 2ν–‰μ—μ„œ assert문을 μ‚¬μš©
    • isinstance() ν•¨μˆ˜λŠ” μž…λ ₯된 값이 λ‹€μŒμ— λ‚˜μ˜€λŠ” 클래슀 의 μΈμŠ€ν„΄μŠ€μΈμ§€λ₯Ό ν™•μΈν•˜λŠ” ν•¨μˆ˜
    • 이 μ½”λ“œμ—μ„œ decimal_number λ³€μˆ˜κ°€ μ •μˆ˜ν˜• μΈμ§€λŠ” 4γ€œ 5ν–‰μ—μ„œ 확인할 수 있음
  • assert문은 μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 잘λͺ»λœ μž…λ ₯ μ—¬λΆ€λ₯Ό 사전에 ν™•μΈν•˜μ—¬ λ‚˜μ€‘μ— ν•„μš” μ—†λŠ” 연산을 막아주고, κ²°κ΅­ λ‹€λ₯Έ μ‚¬λžŒμ΄ λ§Œλ“  μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 데 쒋은 κ°€μ΄λ“œκ°€ 됨 

 

#2. 파일 닀루기

파일의 κ°œλ…


  • 파일file은 컴퓨터λ₯Ό μ‹€ν–‰ν•  λ•Œ κ°€μž₯ 기본이 λ˜λŠ” λ‹¨μœ„
  • ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 것은 늘 파일 을 μ‹€ν–‰ν•˜λŠ” 것
  • ν•˜μ§€λ§Œ 일반적으둜 μœˆλ„μ˜ GUI ν™˜κ²½μ—μ„œλŠ” νŒŒμΌμ„ μ‹€ν–‰ν•˜λŠ” 것이 μ•„λ‹ˆ 라, [κ·Έλ¦Ό 12-2]와 같은 μ•„μ΄μ½˜μ„ λ”λΈ”ν΄λ¦­ν•˜μ—¬ μ‹€ν–‰
  • μ‹€μ œλ‘œλŠ” μ•„μ΄μ½˜ κ³Ό μ—°κ²°λœ 파일이 μ‹€ν–‰λ˜λŠ” ꡬ쑰
  • μ•„μ΄μ½˜μ—μ„œ 마우슀 였λ₯Έμͺ½ λ²„νŠΌμ„ ν΄λ¦­ν•˜κ³  [속성]을 μ„ νƒν•˜λ©΄ [κ·Έλ¦Ό 12-3]κ³Ό 같은 화면을 λ³Ό 수 있음
  • 속성 ν™”λ©΄μ—μ„œ ‘λŒ€μƒ’ ν•­λͺ©μ— μ‹€ν–‰λ˜λŠ” 파일의 κ²½λ‘œκ°€ 있음
  • 이 경둜λ₯Ό κ·ΈλŒ€λ‘œ λ³΅μ‚¬ν•˜μ—¬ μ½˜μ†” 창에 λΆ™μ—¬λ„£κ³  μ‹€ν–‰ν•˜λ©΄ ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨μ΄ 싀행됨
  • λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ€ μ΄λ ‡κ²Œ 파일이 있기 λ•Œ 문에 μ‹€ν–‰λ˜λŠ” 것
  • 단지 μ‚¬μš©μžκ°€ νŽΈν•˜κ²Œ μ“°κΈ° μœ„ν•΄ κ°„λ‹¨ν•œ μ•„μ΄μ½˜μ„ λ§Œλ“€μ–΄ μ‚¬μš©ν•  뿐이 지, κ·Έ μ΄λ©΄μ—λŠ” λͺ¨λ‘ 파일이 μˆ¨μ–΄ μžˆλ‹€κ³  ν•  수 있음

파일의 μ’…λ₯˜


  • 기본적으둜 λ°”μ΄λ„ˆλ¦¬ 파일binary fileκ³Ό ν…μŠ€νŠΈ 파일text file, 두 κ°€μ§€λ‘œ λΆ„λ₯˜ κ°€λŠ₯
  • λ°”μ΄λ„ˆλ¦¬
    • μ»΄ν“¨ν„°λ§Œ 이해할 수 μžˆλŠ” 이진 μ •λ³΄λ‘œ μ €μž₯된 파일
    • λΉ„νŠΈbit ν˜•νƒœλ‘œ μ €μž₯λ˜μ–΄ λ©”λͺ¨μž₯으둜 μ—΄λ©΄ λ‚΄μš©μ΄ 보이지 μ•Šκ±°λ‚˜ λ‚΄μš©μ„ 확인할 수 μ—†λŠ” 파일
    • 정보 효율적으둜 μ €μž₯ν•˜κΈ° μœ„ν•΄ 파일 μ‹œμŠ€ν…œ λŒ€λΆ€λΆ„μ€ 이진 μ •λ³΄λ‘œ μ €μž₯
      • μ—‘μ…€μ΄λ‚˜ μ›Œλ“œ ν”„λ‘œκ·Έλž¨λ“€μ΄ λͺ¨λ‘ 이진 μ •λ³΄λ‘œ μ €μž₯된 이진 파일
  • ν…μŠ€νŠΈ
    • μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” λ¬Έμžμ—΄λ‘œ μ €μž₯된 파일
    • λ©”λͺ¨μž₯으둜 κ·Έ λ‚΄μš©μ„ 확인할 수 있음
    • μ§€κΈˆκΉŒμ§€ μž‘μ„±ν•œ 파이썬 νŒŒμΌμ΄λ‚˜ HTML μ½”λ“œ 파일 등도 λͺ¨λ‘ ν…μŠ€νŠΈ νŒŒμ•Œ
    • 생각보닀 λ§Žμ€ 파일이 ν…μŠ€νŠΈ 파일둜 μ €μž₯

파일 읽기


  • ν…μŠ€νŠΈ νŒŒμΌμ„ 닀루기 μœ„ν•΄ open() ν•¨μˆ˜λ₯Ό μ‚¬μš©
  • open() ν•¨μˆ˜μ™€ 파일λͺ…, 파일 μ—΄κΈ° λͺ¨λ“œλ₯Ό μž…λ ₯ν•˜λ©΄ κ·Έ μ˜΅μ…˜μ— 따라 νŒŒμΌμ„ λ‹€λ£° 수 있음
  • νŒŒμΌμ„ μ—¬λŠ” λͺ¨λ“œμ—λŠ” 읽기 λͺ¨λ“œ, μ“°κΈ° λͺ¨λ“œ, μΆ”κ°€ λͺ¨λ“œ 등이 쑴재
  • νŒŒμ΄μ¬μ—μ„œλŠ” 상황에 따라 μ΄λŸ¬ν•œ ν˜•μ‹μ„ μ‘°ν•©ν•˜μ—¬ νŒŒμΌμ„ λ‹€λ£¨κ²Œ 됨
  • 파일 읽기
    • 파일 읽기 μ‹€ν–‰
  • μ„€λͺ…
    • 1ν–‰μ—μ„œ open() ν•¨μˆ˜ λ‹€μŒμ— 파일λͺ…κ³Ό ‘r’을 μž…λ ₯ν•΄ νŒŒμΌμ— λŒ€ν•œ 정보λ₯Ό λ³€μˆ˜ f에 μ €μž₯
      • 이λ₯Ό 일반적으둜 파일 객체
    • 2ν–‰μ—μ„œ λ³€μˆ˜ 였λ₯Ό μ΄μš©ν•΄ read() ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ©΄ ν•΄λ‹Ή 파일의 ν…μŠ€νŠΈλ₯Ό contents λ³€μˆ˜μ— λ¬Έμžμ—΄λ‘œ μ €μž₯
    • 3ν–‰μ—μ„œλŠ” contents λ³€μˆ˜μ˜ λ‚΄ 용. 즉 ‘dream.txt’ νŒŒμΌμ— μžˆλŠ” ν…μŠ€νŠΈλ₯Ό 화면에 좜λ ₯
    • 4ν–‰μ—μ„œλŠ” λ§ˆμ§€λ§‰μœΌλ‘œ close() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ νŒŒμΌμ„ μ’…λ£Œ
    • λ•Œλ•Œλ‘œ ν…μŠ€νŠΈ νŒŒμΌμ„ λ‹€λ£° λ•Œ 이미 μˆ˜μ •ν•˜κ³  μžˆλŠ” νŒŒμΌμ„ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ—μ„œ λ™μ‹œμ— ν˜ΈμΆœν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œ
      • μ΄λ ‡κ²Œ ν•˜λ‚˜μ˜ 파이썬 ν”„λ‘œκ·Έλž¨μ΄ ν•˜λ‚˜μ˜ νŒŒμΌμ„ μ‚¬μš©ν•  λ•Œ μ‚¬μš©μ„ μ™„λ£Œν•˜λ©΄ λ°˜λ“œμ‹œ ν•΄λ‹Ή νŒŒμΌμ„ μ’…λ£Œν•΄μ•Ό 함

withλ¬Έκ³Ό ν•¨κ»˜ μ‚¬μš©

  • withλ¬Έκ³Ό ν•¨κ»˜ open() ν•¨μˆ˜λ₯Ό μ‚¬μš© κ°€λŠ₯
  • . with문은 λ“€μ—¬μ“°κΈ°λ₯Ό ν•˜λŠ” λ™μ•ˆμ—λŠ” open() ν•¨μˆ˜κ°€ μœ μ§€λ˜κ³ , λ“€μ—¬μ“°κΈ°κ°€ λλ‚˜λ©΄ open() ν•¨μˆ˜λ„ μ’…λ£Œλ˜λŠ” 방식
  • 차이점은 close() ν•¨μˆ˜λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 쓰지 μ•Šμ•„λ„ 파일의 μ‚¬μš©μ„ μ’…λ£Œν•  수 μžˆλ‹€λŠ” 점
  • 특히 ν•΄λ‹Ή 파일 κ°μ²΄λŠ” =둜 ν• λ‹Ήν•˜λŠ” 방식이 μ•„λ‹ˆλΌ as문을 μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λͺ…에 ν• λ‹Ή

 

ν•œ 쀄씩 읽어 λ¦¬μŠ€νŠΈν˜€μœΌλ‘œ λ°˜ν™˜

  • 파일 μ „μ²΄μ˜ ν…μŠ€νŠΈλ₯Ό λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•˜λŠ” read() ν•¨μˆ˜ λŒ€μ‹ . readlines() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•œ 쀄씩 λ‚΄μš©μ„ 읽어와 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ μ €μž₯ κ°€λŠ₯
  • ν•œ μ€„μ˜ 기쀀은 \n 둜 λ‚˜λ‰˜μ–΄μ§€κ³  리슀트둜 λ°˜ν™˜λ  λ•Œ forλ¬Έ λ“± λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ ν™œμš© κ°€λŠ₯

 

 

μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ ν•œ 쀄씩 μ½μ–΄μ˜€κΈ°

  • μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ μ°¨λ‘€λŒ€λ‘œ ν•œ 쀄씩 μ½μ–΄μ˜€λŠ” ν•¨μˆ˜μΈ readline()에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.
  • κΈ°μ‘΄ read() ν•¨μˆ˜λŠ” νŒŒμΌμ„ ν•œ 번 μ—΄ λ•Œ 파일의 μ²˜μŒλΆ€ν„° λκΉŒμ§€ λͺ¨λ“  파일의 λ‚΄μš©μ„ μ½μ–΄μ˜€λŠ” ν•¨μˆ˜μ΄μ§€λ§Œ readline() ν•¨μˆ˜λŠ” 호좜될 λ•Œλ§ˆλ‹€ ν•œ 쀄씩 μ½μ–΄μ˜€λŠ” νŠΉμ§• 쑴재

 

  • μ„€λͺ…
    • 3ν–‰μ—μ„œ while 1둜 μ½”λ“œκ°€ 항상 μˆ˜ν–‰λ˜λ„λ‘ λ§Œλ“  λ‹€μŒ, 4ν–‰μ˜ line = my_file.readline()으둜 ν•œ 쀄씩 νŒŒμΌμ„ μ½μ–΄λ“€μž„
    • λ§Œμ•½ μ½μ–΄μ˜¨ 쀄에 λ‚΄μš©μ΄ μ—†λ‹€λ©΄ 5ν–‰ 의 if not line: break μ½”λ“œμ— μ˜ν•΄ 반볡문이 μ’…λ£Œλ˜μ–΄ 파일 읽기λ₯Ό μ’…λ£Œ
    • ν•˜μ§€λ§Œ 파일 에 남은 λ‚΄μš©μ΄ μžˆλ‹€λ©΄ while문이 계속 μ‹€ν–‰λ˜λ©΄μ„œ λͺ¨λ“  μ½”λ“œλ₯Ό λ‹€ μ½μ–΄μ˜€κ²Œ 됨
    • 파일의 λ‚΄μš©μ„ μ°Ύλ‹€κ°€ 쀑간에 λ©ˆμΆ°μ•Ό ν•  ν•„μš”κ°€ μžˆλŠ” λŒ€μš©λŸ‰ λ°μ΄ν„°λŠ” 같은 μ½”λ“œλ₯Ό 많이 μ‚¬μš©

νŒŒμΌμ— μ €μž₯된 κΈ€μžμ˜ ㅇ톡계정보 좜λ ₯ν•˜κΈ°

  • λ•Œλ‘œλŠ” νŒŒμΌμ— μ €μž₯된 ν…μŠ€νŠΈμ˜ 톡계 정보λ₯Ό 읽어와야 ν•  λ•Œκ°€ 있음
  • 이λ₯Ό μœ„ν•΄ 많이 μ‚¬μš©ν•˜λŠ” 방법
    • 이미 배운 split() ν•¨μˆ˜μ™€ len() ν•¨μˆ˜λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” 것
    • νŒŒμΌμ— μ €μž₯된 λͺ¨λ“  ν…μŠ€νŠΈλ₯Ό μ½μ–΄μ˜¨ ν›„ μ°¨λ‘€λŒ€λ‘œ κΈ€μž 수, 단어 수, 쀄 수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨

 

파일 μ“°κΈ°


  • νŒŒμΌμ— 무엇인가λ₯Ό μ“°κΈ° μœ„ν•΄μ„œλŠ” 파일 μ—΄κΈ° λͺ¨λ“œλ₯Ό ‘W’둜 μ„€μ •ν•˜λŠ” 것과 ν•¨κ»˜ 인코딩 encoding μ΄λΌλŠ” κ°œλ…μ„ μ•Œμ•„μ•Ό 함
  • 인코딩
    • ν…μŠ€νŠΈ νŒŒμΌμ„ μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ €μž₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν‘œμ€€μ„ 지 μ •ν•΄μ•Ό 함
    • 인코딩 μ˜΅μ…˜ → 인코딩 ν‘œμ€€μ„ 지정할 수 있음
    • 일반적으둜 인코딩은 UTF-8을 많이 μ‚¬μš©
    • νŒŒμΌμ„ μœˆλ„μ—μ„œλ§Œ μ‚¬μš©ν•œλ‹€λ©΄ cp949도 μ‚¬μš©κ°€λŠ₯
    • μš΄μ˜μ²΄μ œλ‚˜ 파일의 μ‚¬μš© ν™˜κ²½μ— 따라 λ‹€λ₯΄κ²Œ μ„€μ •ν•΄μ•Ό 함

pickle λͺ¨λ“ˆ


  • 파이썬 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  λ•Œ μƒμ„±λ˜λŠ” μ—¬λŸ¬ λ³€μˆ˜μ™€ κ°μ²΄λŠ” μˆœκ°„μ μœΌλ‘œ λ©”λͺ¨λ¦¬μ— λ‘œλ”©λ˜μ—ˆλ‹€ κ°€ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ©΄ 사라짐
  • ν•˜μ§€λ§Œ λ•Œλ‘œλŠ” μ΄λ ‡κ²Œ μ‚¬μš©λ˜λŠ” 객체λ₯Ό μ €μž₯μ‹œμΌœ 놓고 ν•„ μš”ν•  λ•Œ λ‹€μ‹œ λΆˆλŸ¬μ•Ό ν•˜λŠ” κ²½μš°κ°€ 있음
  • 이 경우λ₯Ό ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” μ˜μ†ν™”persistence라고 함
    • κ°„λ‹¨νžˆ ν‘œν˜„ν•˜λ©΄ ν•„μš”ν•œ 객체λ₯Ό 파일둜 μ €μž₯μ‹œμΌœ λ‹€μ‹œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” 것
  • νŒŒμ΄μ¬μ€ pickle λͺ¨λ“ˆμ„ μ œκ³΅ν•˜μ—¬ λ©”λͺ¨λ¦¬μ— λ‘œλ”©λœ 객체λ₯Ό μ˜μ†ν™”ν•  수 μžˆλ„λ‘ 지원
  • 리 μŠ€νŠΈμ— λ“€μ–΄κ°„ λ°μ΄ν„°λ‚˜ 클래슀의 였브젝트 등을 파일둜 μ €μž₯μ‹œμΌœ λ‚˜μ€‘μ— λ‹€μ‹œ μ‚¬μš©ν•  수 있 도둝 ν•΄μ€Œ
  • 아직은 ν•„μš” μ—†μ§€λ§Œ μ €μž₯ν•΄μ•Ό ν•˜λŠ” 정보가 λ§Žμ•„μ§€κ³  계산 κ²°κ³Όλ₯Ό μ €μž₯ν•˜μ˜€λ‹€κ°€ λ‚˜μ€‘μ— λ‹€μ‹œ 뢈러 μ‚¬μš©ν•  κ²½μš°μ—λ„ μš”κΈ΄ν•˜κ²Œ μ“Έ 수 μžˆλŠ” κΈ°λŠ₯
  • pickle λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒ μ½”λ“œμ™€ 같이 ν˜ΈμΆœν•œ ν›„ 객체λ₯Ό μ €μž₯ν•  수 μžˆλŠ” νŒŒμΌμ„ μ—΄κ³  μ €μž₯ν•˜κ³ μž ν•˜λŠ” 객체λ₯Ό λ„˜κΈ°λ©΄dump 됨
  • νŒŒμΌμ„ 생성할 λ•ŒλŠ” ‘w’κ°€ μ•„λ‹Œ ‘Wb’둜 μ—΄μ–΄μ•Ό ν•˜λŠ”λ° μ—¬κΈ°μ„œ BλŠ” λ°”μ΄λ„ˆλ¦¬binaryλ₯Ό λœ»ν•˜λŠ” μ•½μžλ‘œ ν…μŠ€νŠΈ 파일이 μ•„λ‹Œ λ°”μ΄λ„ˆλ¦¬ 파일둜 μ €μž₯λœλ‹€λŠ” 의미
  • dump() ν•¨μˆ˜μ—μ„œλŠ” μ €μž₯ν•  객체, μ €μž₯될 파일 객체λ₯Ό μ°¨λ‘€λŒ€λ‘œ 인수 둜 λ„£μœΌλ©΄ ν•΄λ‹Ή 객체가 ν•΄λ‹Ή νŒŒμΌμ— μ €μž₯됨
  • μ €μž₯된 pickle νŒŒμΌμ„ λΆˆλŸ¬μ˜€λŠ” ν”„λ‘œμ„ΈμŠ€λ„ μ €μž₯ ν”„λ‘œμ„ΈμŠ€μ™€ κ°™μŒ
  • λ¨Όμ € list.pickle 파일 을 ‘rb’ λͺ¨λ“œλ‘œ μ½μ–΄μ˜¨ ν›„, ν•΄λ‹Ή 파일 객체λ₯Ό pickle λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜μ—¬ load() ν•¨μˆ˜λ‘œ 뢈러였면 됨
  • 사싀 pickle 객체λ₯Ό 뢈러올 λ•Œ ν•΄λ‹Ή 객체가 μ–΄λ–€ 객체인지에 λŒ€ν•œ 정보가 μ „ν˜€ μ—†μ–΄ μƒλ‹Ήνžˆ ν˜Όλž€μŠ€λŸ¬μšΈ λ•Œλ„ μžˆμ§€λ§Œ, ν•΄λ‹Ή μ½”λ“œλ₯Ό κ°œλ°œν•œ 개발자라면 μ½”λ“œμ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •ν™•νžˆ μ•Œκ³  μžˆμœΌλ―€λ‘œ 어렀움 없이 μ‚¬μš©ν•  수 있음
  • λ‹€μŒ 파이썬 μ…Έ μ½”λ“œλŠ” μ•žμ—μ„œ 리슀트 객체λ₯Ό list.pickle νŒŒμΌμ— μ €μž₯ν–ˆκΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή νŒŒμΌμ„ 뢈러 μ‚¬μš©ν•  λ•Œλ„ λ™μΌν•˜κ²Œ 리슀트 객체가 λ°˜ν™˜λœ 것을 μ•Œ 수 있음
  • pickle λͺ¨λ“ˆμ€ λ‹¨μˆœνžˆ μƒμ„±λœ 객체λ₯Ό μ €μž₯ν•˜λŠ” κΈ°λŠ₯도 μžˆμ§€λ§Œ μ‚¬μš©μžκ°€ 직접 μƒμ„±ν•œ 클래슀 객체도 μ €μž₯
  • λ‹€μŒ μ½”λ“œμ™€ 같이 κ³±μ…ˆμ„ μ²˜λ¦¬ν•˜λŠ” 클래슀λ₯Ό μƒμ„±ν•œλ‹€κ³  κ°€μ •
  • 이 μ½”λ“œμ˜ ν΄λž˜μŠ€λŠ” 처음 객체λ₯Ό 생성할 λ•Œ μ΄ˆκΉƒκ°’μ„ μƒμ„±ν•˜κ³ , multiply() ν•¨μˆ˜λ₯Ό λΆ€λ₯Ό λ•Œλ§ˆλ‹€ ‘초 κΉƒκ°’ * number’의 값을 ν˜ΈμΆœν•˜λŠ” 클래슀
  • μΌμ’…μ˜ κ³±μ…ˆ 클래슀라고 생각
  • κ·ΈλŸ¬λ‚˜ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λ‹€ 보면 맀우 λ³΅μž‘ν•œ 연산도 λ”°λ‘œ μ €μž₯ν•˜μ—¬ μ‚¬μš©ν•  λ•Œκ°€ 있음
  • μ΄λŸ¬ν•œ μ €μž₯ λͺ¨λ“ˆμ„ 효율적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ‹€μŒ μ½”λ“œμ²˜λŸΌ pickle λͺ¨λ“ˆμ„ μ‚¬μš©ν•  수 있음