본문 바로가기
코딩 공부/파이썬 (혼공단 11기)

[혼공파] 5주차_06 ~ 07-1

by 루담 2024. 2. 1.

 

🎉🎉🎉

👩🏻‍💻 4주차 우수 혼공족 선정!!! 감사합니당 🌟🌟

 

그리구,, 환절기라 그런가 아프신 분들이 좀 많나보다.

혼공 학습단 친구덜아,,! 다덜 아프지마,,,😭

 

 


06-1. 구문 오류와 예외
▷ 핵심 키워드 - 구문 오류 / 예외(런타임 에러) / 기본 예외 처리 / try except 구문

 

✍🏻 지금까지의 책 예제에서 발생하는 오류들을 '예외'라고 불렀다

 

 

✏️오류의 종류

  • 프로그램 실행 전에 발생하는 오류 -> 구문 오류
  • 프로그램 실행 중에 발생하는 오류 -> 예외 / 런타임 오류

 

👻구문 오류

-괄호의 개수, 들여쓰기 문제 등으로 프로그램이 실행되기도 전에 발생하는 오류

print("# 예외를 강제로 발생시켜 보자)
# 닫는 따옴표로 문자열을 닫지 않아서 오류 발생

👉🏻SyntaxError: 구문에 문제가 있어 프로그램이 실행조차 되지 않는 오류

 

👻예외

-실행 중에 발생하는 오류

#프로그램 시작
print("# 프로그램이 시작되었습니다")

#예외 발생 코드
list_a[1]

👆🏻코드 실행하면 프로그램은 실행되지만, list_a[1]을 읽을 때 NameError가 발생함

👉🏻list_a = [1, 2, 3, 4, 5]를 넣어 수정하면 정상적으로 실행된다 / list_a를 정의해야 했기 때문

 

✏️기본 예외 처리

-예외 처리: 예외를 해결하는 모든 것 / 다음 두 가지로 나뉨

  • 조건문을 사용하는 방법
  • try 구문을 사용하는 방법

 

👻예외 상황 확인하기

-예외가 발생할 수 있는 코드

number_input_a = int(intput("정수 입력>")

print("원의 반지름:", number_input_a)
print("원의 둘레:", 2 * 3.14 * number_input_a)
print("원의 넓이:", 3.14 * number_input_a * number_input_a)

👉🏻여기서 정수가 아닌 "7센티미터"라는 문자열을 입력하게 되면 예외가 발생하게 된다

 

👻조건문으로 예외 처리하기

-'정수를 입력하지 않았을 때'를 조건으로 구분해서 해당 상황일 때 다른 처리를 하도록 설정하기

 

📋isdigit() 함수 - 숫자로만 구성된 글자인지 확인 / int() 함수를 이용해 숫자로 변환할 수 없는 문자열을 변환하면서 발생하는 예외를 피할 수 있다

 

🖐🏻직접 해보는 손코딩🖐🏻

#숫자를 입력받습니다.
user_input_a = input("정수 입력>")

#사용자 입력이 숫자로만 구성되어 있을 때
if user_input_a.isdigit():
    #숫자로 변환합니다.
    number_input_a = int(user_input_a)
    #출력합니다.
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
else:
    print("정수를 입력하지 않았습니다.")

-결과


정수 입력

문자열 입력

 

✏️try except 구문

-예외가 발생할 상황을 예측하고 모두 조건문으로 처리하는 것은 매우 힘든 일이다. 따라서 요즘 프로그래밍 언어는 예외를 처리할 수 있는 구문을 제공한다. 바로 try except 구문.

try:
     예외가 발생할 가능성이 있는 코드
except:
     예외가 발생했을 때 실행할 코드

 

🖐🏻직접 해보는 손코딩🖐🏻

#try except 구문으로 예외를 처리합니다.
try:
    #숫자로 변환합니다.
    number_input_a = int(input("정수 입력>"))
    #출력합니다.
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
except:
    print("무언가 잘못되었습니다.")

-결과

 

👻try except 구문과 pass 키워드 조합하기

try:
    예외가 발생할 가능성이 있는 코드
except:
    pass

 

🖐🏻직접 해보는 코딩🖐🏻

# 변수를 선언합니다.
list_input_a = ["52", "273", "32", "스파이", "103"]

# 반복을 적용합니다.
list_number = []
for item in list_input_a:
    #숫자로 변환해서 리스트에 추가합니다.
    try:
        float(item) # 예외가 발생하면 알아서 다음으로 진행은 안 되겠지?
        list_number.append(item) # 예외 없이 통과했으면 list_number 리스트에 넣어줘!
    except:
        pass
   
# 출력합니다.
print("{} 내부에 있는 숫자는".format(list_input_a))
print("{}입니다.".format(list_number))

-결과

👉🏻숫자로 변환할 수 없는 문자열이라면 float(item)를 실행할 때 예외 발생 / 이를 이용해서 try except 구문으로 감싸고 예외가 발생하지 않는 경우에만 list_number.append(item)가 실행되도록 만드는 코드

 

✏️try except else 구문

try:
    예외가 발생할 가능성이 있는 코드
except:
    예외가 발생했을 때 실행할 코드
else:
    예외가 발생하지 않았을 때 실행할 코드

 

🖐🏻직접 해보는 손코딩🖐🏻

#try except else 구문으로 예외를 처리합니다.
try:
    #숫자로 변환합니다.
    number_input_a = int(input("정수 입력>"))
except:
    print("정수를 입력하지 않았습니다.")
else:
    #출력합니다.
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)

-결과


정수 입력

문자열 입력

 

 

✏️finally 구문

-예외가 발생하든 발생하지 않든 무조건 실행할 때 사용하는 코드

try:
    예외가 발생할 가능성이 있는 코드
except:
    예외가 발생했을 때 실행할 코드
else:
    예외가 발생하지 않았을 때 실행할 코드
finally:
    무조건 실행할 코드

 

🖐🏻직접 해보는 손코딩🖐🏻

#try except 구문으로 예외를 처리합니다.
try:
    #숫자로 변환합니다.
    number_input_a = int(input("정수 입력>"))
    #출력합니다.
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
except:
    print("정수를 입력하지 않았습니다.")
else:
    print("예외가 발생하지 않았습니다.")
finally:
    print("일단 프로그램이 어떻게든 끝났습니다.")

-결과


정수 입력

문자열 입력

👉🏻두 가지 모두 "일단 프로그램이 어떻게든 끝났습니다."라는 fanally 구문이 실행된다.

 

👻try, except, finally 구문의 조합

-예외 처리 구문의 규칙

  • try 구문은 단독으로 사용할 수 없으며, 반드시 except 구문 또는 finally 구문과 함께 사용해야 한다
  • else 구문은 반드시 except 구문 뒤에 사용해야 한다

-조합

  • try + except
  • try + except + else
  • try + except + finally
  • try + except + else + finally
  • try + finally
  • 이 외의 조합은 실행할 때 오류가 발생함

 

👻finally에 대한 오해

 

🖐🏻직접 해보는 손코딩1🖐🏻

-파일이 제대로 닫혔는지 확인해보기

#try except 구문 사용
try:
    #파일을 엽니다
    file = open("info.txt", "w")
    #여러 가지 처리를 수행
    #파일을 닫습니다
    file.close()
except:
    print("오류가 발생했습니다.")
   
print("#파일이 제대로 닫혔는지 확인하기")
print("file.closed:", file.closed)

-결과

제대로 닫힘!

📋프로그램이 항상 켜져있는 프로그램(데몬 또는 서비스)이라면 문제가 생긴다.

 

🖐🏻직접 해보는 손코딩2🖐🏻

-파일 중간에 예외 발생시키기

#try except 구문을 사용
try:
    #파일을 엽니다.
    file = open("info.txt", "w")
    #여러 가지 처리를 수행합니다.
    예외.발생해라() #일부러 예외 발생시키기
    #파일을 닫습니다.
    file.close()
except:
    print("오류가 발생했습니다.")
   
print("#파일이 제대로 닫혔는지 확인하기")
print("file.closed:", file.closed)

-결과

실패!

👉🏻이걸 finally 구문을 사용해 파일을 닫게 해야 한다.

 

🖐🏻직접 해보는 손코딩3🖐🏻

-finally 구문 사용해 파일 닫기

#try except 구문을 사용
try:
    #파일을 엽니다
    file = open("info.txt", "w")
    #여러 가지 처리를 수행합니다
    예외.발생해라()
except:
    print("오류가 발생했습니다.")
finally:
    #파일을 닫습니다
    file.close()
   
print("#파일이 제대로 닫혔는지 확인하기")
print("file.closed:", file.closed)

-결과

오류 발생해도 제대로 닫힘!

 

🖐🏻직접 해보는 손코딩4🖐🏻

-그냥 try except 구문 끝난 후에 파일 닫아보기

#try except 구문을 사용합니다
try:
    #파일을 엽니다
    file = open("info.txt", "w")
    #여러 가지 처리를 수행합니다
    예외.발생해라()
except:
    print("오류가 발생했습니다.")
   
#파일을 닫습니다
file.close()
print("#파일이 제대로 닫혔는지 확인하기")
print("file.closed:", file.closed)

-결과

👆🏻그냥 구문 모두 끝난 후에 파일을 닫아도 된다.

👉🏻파일 처리를 할 때 finally를 무조건 사용하는 것이 아니라 finally 키워드를 사용하면 코드가 깔끔해질 것 같다고 생각되는 경우에 사용하는 것

 

👻try 구문 내부에서 return 키워드를 사용하는 경우 (finally 깔끔)

-finally 구문은 반복문 또는 함수 내부에 있을 때 위력을 발휘한다.

 

🖐🏻직접 해보는 손코딩1🖐🏻

#test() 함수를 선언합니다
def test():
    print("test() 함수의 첫 줄입니다.")
    try:
        print("try 구문이 실행되었습니다.")
        return
        print("try 구문의 return 키워드 뒤입니다.")
    except:
        print("except 구문이 실행되었습니다.")
    else:
        print("else 구문이 실행되었습니다.")
    finally:
        print("finally 구문이 실행되었습니다.")
    print("test() 함수의 마지막 줄입니다.")

#test() 함수를 호출합니다.
test()

-결과

.👉🏻try 구문 중간에서 탈출해도 finally 구문은 무조건 실행된다.

 

🖐🏻직접 해보는 손코딩2🖐🏻

#함수를 선언합니다
def write_text_file(filename, text):
    #try except 구문을 사용합니다
    try:
        #파일을 엽니다
        file = open(filename, "w")
        #여러 가지 처리를 수행합니다
        return file.write(text)
    except:
        print("오류가 발생했습니다.")
    finally:
        #파일을 닫습니다
        file.close()
       
#함수를 호출합니다
write_text_file("test.txt", "안녕하세요!")

-결과

(결과가 맞는지는 모르겠지만 현재 낡고 지쳤으므로 이것으로 기록)

 

 

👻반복문과 함께 사용하는 경우(finally 깔끔22)

-반복문에서 break로 빠져나갈 때

 

🖐🏻직접 해보는 손코딩🖐🏻

print("프로그램이 시작되었습니다.")

while True:
    try:
        print("try 구문이 실행되었습니다.")
        break
        print("try 구문의 break 키워드 뒤입니다.")
    except:
        print("except 구문이 실행되었습니다.")
    finally:
        print("finally 구문이 실행되었습니다.")
    print("while 반복문의 마지막 줄입니다.")
print("프로그램이 종료되었습니다.")

-결과

와!!!!!!

👉🏻break 키워드로 try 구문 전체를 빠져나가도 finally 구문이 실행되는 것을 볼 수 있다

 

 

6-1 chapter 마무리

 

🔎핵심 포인트

-구문 오류는 프로그램의 문법적인 오류로 프로그램이 실행조차 되지 않게 만드는 오류

-예외(런타임 에러)는 프로그램 실행 중에 발생하는 에러

-기본 예외 처리는 조건문 등을 사용해 예외를 처리하는 기본적인 방법

-try except 구문은 예외 처리에 특화된 구문

 

 


06-2. 예외 고급
▷ 핵심 키워드 - 예외 객체 / raise 구문 / 깃허브

 

✍🏻 예외 객체 - 프로그래밍 언어는 예외가 발생하면 예외와 관련된 정보가 생긴다. 그리고 이러한 예외 정보는 예외 개게에 저장된다.

-예외 객체의 형태

try:
    예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
    예외가 발생했을 때 실행할 구문

 

 

✏️예외 객체

-Exception: '모든 예외의 어머니'

 

🖐🏻직접 해보는 손코딩🖐🏻

# try except 구문으로 예외를 처리합니다.
try:
    # 숫자로 변환합니다
    number_input_a = int(input("정수 입력>"))
    # 출력합니다
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
except Exception as exception:
    # 예외 객체를 출력해봅니다
    print("type(exception):", type(exception))
    print("exception:", exception)

-결과

👉🏻예외 강제 발생시킴!

 

✏️예외 구분하기

-예외 객체를 사용하면 except 구문을 if 조건문처럼 사용해서 예외를 구분할 수 있다.

 

👻여러 가지 예외가 발생할 수 있는 상황

 

🖐🏻직접 해보는 손코딩🖐🏻

-여러 가지 예외가 발생할 수 있는 코드

# 변수를 선언합니다
list_number = [52, 273, 32, 72, 100]

# try except 구문으로 예외를 처리합니다
try:
    # 숫자를 입력받습니다
    number_input = int(input("정수 입력:"))
    # 리스트의 요소를 출력합니다
    print("{}번째 요소: {}".format(number_input, list_number[number_input]))
except Exception as exception:
    # 예외 객체를 출력합니다
    print("type(exception):", type(exception))
    print("exception:", exception)

-결과

첫 번째) 정상적으로 정수를 입력한 경우에는 어떠한 예외도 발생하지 않음

두 번째) 정수로 변환될 수 없는 값을 입력한 경우에는 ValueError가 발생

세 번째) 정수를 입력하지만, 리스트의 길이를 넘는 인덱스를 입력한 경우에는 IndexError가 발생

 

👻예외 구분하기

-파이썬은 except 구문 뒤에 예외의 종류를 입력해서 예외를 구분 할 수 있다.

try:
    예외가 발생할 가능성이 있는 구문
except 예외의 종류A:
    예외A가 발생했을 때 실행할 구문
except 예외의 종류B:
    예외B가 발생했을 때 실행할 구문
except 예외의 종류C:
    예외C가 발생했을 때 실행할 구문

 

🖐🏻직접 해보는 손코딩🖐🏻

# 변수를 선언합니다
list_number = [52, 273, 32, 72, 100]

# try except 구문으로 예외를 처리합니다
try:
    # 숫자를 입력받습니다
    number_input = int(input("정수 입력>"))
    # 리스트의 요소를 출력합니다
    print("{}번째 요소: {}".format(number_input, list_number[number_input]))
except ValueError:
    # ValueError가 발생하는 경우
    print("정수를 입력해 주세요!")
except IndexError:
    # IndexError가 발생하는 경우
    print("리스트의 인덱스를 벗어났어요!")

-결과


정수가 아닌 값을 입력

리스트의 인덱스를 넘는 숫자를 입력

 

👻예외 구분 구문과 예외 객체

-as 키워드: 예외를 구분할 때 각각의 except 구문 뒤에 예외 객체를 붙여 활용할 수 있다.

 

🖐🏻직접 해보는 손코딩🖐🏻

# 변수를 선언합니다
list_number = [52, 273, 32, 72, 100]

# try except 구문으로 예외를 처리합니다
try:
    # 숫자를 입력받습니다
    number_input = int(input("정수 입력>"))
    # 리스트의 요소를 출력합니다
    print("{}번째 요소: {}".format(number_input, list_number[number_input]))
except ValueError as exception:
    # ValueError가 발생하는 경우
    print("정수를 입력해 주세요!")
    print("exception:", exception)
except IndexError as exception:
    # IndexError가 발생하는 경우
    print("리스트의 인덱스를 벗어났어요!")
    print("exception:", exception)

-결과

 

✏️모든 예외 잡기

-except 구문으로 예외를 구분하면 if, elif, else 조건문처럼 차례대로 오류를 검출하면서 확인한다.

 

🖐🏻직접 해보는 손코딩🖐🏻

-예외 처리를 했지만 예외를 못 잡는 경우

# 변수를 선언합니다
list_number = [52, 273, 32, 72, 100]

# try excpet 구문으로 예외를 처리합니다
try:
    # 숫자를 입력받습니다
    number_input = int(input("정수 입력>"))
    # 리스트의 요소를 출력합니다
    print("{}번째 요소: {}".format(number_input, list_number[number_input]))
    예외. 발생해주세요() #잡지 않은 예외가 발생하도록
except ValueError as exception:
    # ValueError가 발생하는 경우
    print("정수를 입력해 주세요!")
    print(type(exception), exception)
except IndexError as exception:
    # IndexError가 발생하는 경우
    print("리스트의 인덱스를 벗어났어요!")
    print(type(exception), exception)

-결과

 

🖐🏻직접 해보는 손코딩🖐🏻

# 변수를 선언합니다
list_number = [52, 273, 32, 72, 100]

# try except 구문으로 예외를 처리합니다
try:
    # 숫자를 입력 받습니다
    number_input = int(input("정수 입력>"))
    # 리스트의 요소를 출력합니다
    print("{}번째 요소: {}".format(number_input, list_number[number_input]))
    예외.발생해주세요()
except ValueError as exception:
    # ValueError가 발생하는 경우
    print("정수를 입력해 주세요!")
    print(type(exception), exception)
except IndexError as exception:
    # IndexError가 발생하는 경우
    print("리스트의 인덱스를 벗어났어요!")
    print(type(exception), exception)
except Exception as exception:
    # 이외의 예외가 발생한 경우
    print("미리 파악하지 못한 예외가 발생했습니다.")
    print(type(exception), exception)

-결과

 

📋큰 규모의 프로그램을 개발할 때는 '예외 처리로 떡칠을 한다'라고 표현할 정도로 예외 처리를 많이 사용한다. 최대한 잡을 수 있는 것들을 예측해 보고 잡을 수 있도록 노력하는 것이 개발자의 자세!

 

✏️raise 구문

-프로그램이 강제 종료되는 것을 막기 위해 예외는 꼭 처리해야 한다.

-아직 구현되지 않은 부분에서 강제로 예외 발생시키기

# 입력을 받습니다
number = input("정수 입력>")
number = int(number)
#조건문 사용
if number > 0:
    # 양수일 때: 아직 미구현 상태입니다
    raise NotImplementedError
else:
    # 음수일 때: 아직 미구현 상태입니다
    raise NotImplementError

👉🏻이 때 사용한 raise 키워드예외를 발생시키는 기능을 한다.

raise 예외 객체

 


🌟깃허브

-대부분의 파이썬 프레임워크 라이브러리들은 깃허브(GitHub)라는 사이트에 코드가 공개되어 있다.

(어케... 쓰는거지?)

 

 


 

6-2 마무리

 

🔎핵심 포인트

-예외 객체는 예외와 관련된 정보를 담고 있는 객체

-raise 구문은 예외를 강제로 발생시킬 때 사용하는 구문

-깃허브는 많은 사람이 함께 개발하는 소셜 코딩 사이트

 

 


07-1. 표준 모듈
▷ 핵심 키워드 - 표준 모듈 / import 구문 / from 구문 / as 키워드

 

✍🏻모듈: 여러 변수와 함수를 가지고 있는 집합체로, 크게 표준 모듈외부 모듈로 나뉜다.

표준 모듈: 파이썬에 기본적으로 내장되어 있는 모듈 외부 모듈: 다른 사람들이 만들어서 공개한 모듈

 

-모듈을 가져올 때는 👇🏻다음과 같은 구문을 사용한다

import 모듈 이름

 

 

✏️모듈 사용의 기본: math 모듈

-math 모듈은 수학과 관련된 기능을 가지고 있다.

 

👻모듈 문서

-math 모듈의 함수

변수 또는 함수 설명
sin(x) 사인값을 구합니다
cos(x) 코사인값을 구합니다
tan(x) 탄젠트값을 구합니다
log(x[, base]) 로그값을 구합니다
ceil(x) 올림합니다
floor(x) 내림합니다

 

👻from 구문

-앞에 무언가를 계속 입력하는 것이 귀찮다고 느껴질 경우에는 from 구문을 사용한다

from 모듈 이름 import 가져오고 싶은 변수 또는 함수

 

👻as 구문

-모듈의 이름이 너무 길어서 짧게 줄여 사용하고 싶은 경우에는 as 구문을 사용한다

import 모듈 as 사용하고 싶은 식별자

 

✏️random 모듈

-random 모듈은 랜덤한 값을 생성할 때 사용하는 모듈

import random

👉🏻random 모듈을 임포트한 뒤, random을 입력하고 뒤에 마침표를 찍으면 자동 완성 기능으로 random 모듈이 가지고 있는 기능들을 확인할 수 있다

 

🖐🏻직접 해보는 손코딩🖐🏻

import random
print("# random 모듈")

# random(): 0.0 <= x < 1.0 사이의 float 리턴합니다
print("- random():", random.random())

# uniform(min, max): 지정한 범위 사이의 float를 리턴합니다
print("- uniform(10, 20):", random.uniform(10, 20))

# randrange(): 지정한 범위의 int를 리턴합니다
# - randrange(max): 0부터 max 사이의 값을 리턴합니다
# - randrange(min, max): min부터 max 사이의 값을 리턴합니다
print("- randrange(10):", random.randrange(10))

# choice(list): 리스트 내부에 있는 요소를 랜덤하게 선택합니다
print("- choice([1, 2, 3, 4, 5]):", random.choice([1, 2, 3, 4, 5]))

# shuffle(list): 리스트의 요소들을 랜덤하게 섞습니다
print("- shuffle([1, 2, 3, 4, 5]):", random.shuffle([1, 2, 3, 4, 5]))

# sample(list, k=<숫자>): 리스트의 요소 중에 k개를 뽑습니다
print("- sample([1, 2, 3, 4, 5], k=2):", random.sample([1, 2, 3, 4, 5], k=2))

-결과

 

✏️sys 모듈

-sys 모듈: 시스템과 관련된 정보를 가지고 있는 모듈

 

🖐🏻직접 해보는 손코딩🖐🏻

# 모듈을 읽어 들입니다
import sys

# 명령 매개변수를 출력합니다
print(sys.argv)
print("---")

# 컴퓨터 환경과 관련된 정보를 출력합니다
print("getwindowsversion: ()", sys.getwindowsversion())
print("---")
print("copyright:", sys.copyright)
print("---")
print("version:", sys.version)

# 프로그램을 강제로 종료합니다
sys.exit()

(명령 프롬포트 창에서 [py module_sys.py 10 20 30]을 입력해서 실행해보기. 경로가 일치해야 해서 Desktop에서 실행했다)

-결과

👉🏻sys.argv라고 되어 있는 부분이 명령 매개변수 -> 프로그램을 실행할 때 추가로 입력하는 값들을 의미한다

👉🏻코드를 실행하면 sys.argv에 ['module_sys.py', '10', '20', '30']이라는 리스트가 들어오게 된다. 이 외의 값들은 윈도우의 버전, 파이썬의 저작권 등을 확인하는 단순한 것들

 

✏️os 모듈

-os 모듈: 운영체제와 관련된 기능을 가진 모듈 / 새로운 폴더를 만들거나 폴더 내부의 파일 목록을 보는 일 모두 os 모듈을 활용해서 처리한다.

 

🖐🏻직접 해보는 손코딩🖐🏻

# 모듈을 읽어들입니다
import os

# 기본 정보를 몇 개 출력해 봅니다
print("현재 운영체제:", os.name)
print("현재 폴더:", os.getcwd())
print("현재 폴더 내부의 요소:", os.listdir())

# 폴더를 만들고 제거합니다(폴더가 비어있을 때만 제거 가능)
os.mkdir("hello")
os.rmdir("hello")

# 파일을 생성하고 + 파일 이름을 변경합니다
with open("original.txt", "w") as file:
    file.write("hello")
os.rename("original.txt", "new.txt")

# 파일을 제거합니다
os.remove("new.txt")
#os.unlink("new.txt")

# 시스템 명령어 실행
os.system("dir")

-결과

너무 길어서 중간부터는 잘랐따

📋remove() 함수와 unlink() 함수는 같은 함수이다. 아무거나 사용해도 상관 없다.

 

✏️datetime 모듈

-datetime 모듈: date(날짜), time(시간)과 관련된 모듈

 

🖐🏻직접 해보는 손코딩1🖐🏻

# 모듈을 읽어들입니다
import datetime

# 현재 시각을 구하고 출력하기
print("# 현재 시각 출력하기")
now = datetime.datetime.now()
print(now.year, "년")
print(now.month, "월")
print(now.day, "일")
print(now.hour, "시")
print(now.minute, "분")
print(now.second, "초")
print()

# 시간 출력 방법
print("# 시간을 포맷에 맞춰 출력하기")
output_a = now.strftime("%Y.%m.%d %H:%M:%S")
output_b = "{}{}{}{}{}{}초".format(now.year,\
    now.month,\
    now.day,\
    now.hour,\
    now.minute,\
    now.second)
output_c = now.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초")
print(output_a)
print(output_b)
print(output_c)
print()

-결과

👉🏻strftime() 함수를 사용하면 시간을 형식에 맞게 출력할 수 있지만, 한국어 등의 문자를 매개변수에 넣을 수 없다. 이를 보완하고자 output_b와 output_c 같은 형식을 사용한다.

📋문자열, 리스트 등 앞에 *을 붙이면 요소 하나하나가 매개변수로 지정된다

 

🖐🏻직접 해보는 손코딩2🖐🏻

# 모듈을 읽어 들입니다
import datetime
now = datetime.datetime.now()

# 특정 시간 이후의 시간 구하기
print("# datetime.timedelta로 시간 더하기")
after = now + datetime.timedelta(\
    weeks=1,\
    days=1,\
    hours=1,\
    minutes=1,\
    seconds=1)
print(after.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초"))
print()

# 특정 시간 요소 교체하기
print("# now.replace()로 1년 더하기")
output = now.replace(year=(now.year + 1))
print(output.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초"))

-결과

👉🏻timedelta() 함수를 사용하면 특정한 시간의 이전 또는 이후를 구할 수 있다

👉🏻1년 후를 구할 때는 replace() 함수를 사용한다

 

✏️time 모듈

-time 모듈: 시간과 관련된 기능을 다룰 때 사용함 / 특정 시간 동안 코드 진행을 정지할 때 많이 사용한다

-time 모듈 임포트 방법

import time

-time.sleep() 함수: 특정 시간 동안 코드 진행을 정지할 때 사용하는 함수 / 매개변수에는 정지하고 싶은 시간을 초 단위로 입력한다

 

🖐🏻직접 해보는 손코딩🖐🏻

import time

print("지금부터 5초 동안 정지합니다!")
time.sleep(5)
print("프로그램을 종료합니다")

-결과

5초 후에 "프로그램을 종료합니다"가 뜸

 

✏️urllib 모듈

-urllib 모듈: URL을 다루는 라이브러리 / 인터넷 주소를 활용할 때 사용하는 라이브러리

 

🖐🏻직접 해보는 손코딩🖐🏻

# 모듈을 읽어 들입니다
from urllib import request

# urlopen() 함수로 구글의 메인 페이지를 읽습니다
target = request.urlopen("http://google.com")
output = target.read()

# 출력합니다
print(output)

-결과

너무 길어서 짤랐다.

📋앞에 'b'라는 글자가 있는데 이는 바이너리 데이터(binary data)를 의미한다.

 

 

7-1 마무리

 

🔎핵심 포인트

-표준 모듈은 파이썬이 기본적으로 제공하는 모듈

-import 구문은 모듈을 읽어 들일 때 사용하는 구문

-모듈을 읽어들일 때 from 구문을 사용하면 모듈에서 가져오려는 변수나 함수 앞에 모듈 이름을 붙이지 않아도 된다

-as 키워드는 모듈을 읽어 들이고 별칭을 붙일 때 사용하는 구문

 

 

 


기본미션

Q) 구문 오류와 예외의 차이

A) 구문 오류는 프로그램 실행 전에 나는 오류로, try except 구문으로 처리할 수 없다.

반면에 예외는 프로그램 실행 중에 나는 오류로, try except 구문으로 처리할 수 있다.

 

선택미션

Q) 구문 오류가 예상되면 '구문 오류'에, 예외 발생이 예상되면 '예외'에 체크 표시를 한 후, 예상되는 에러명도 쓰시오.

output = 10 + "개"  #1
int("안녕하세요")  #2
cursor.close)  #3
[1, 2, 3, 4, 5][10]  #4

A)

#1. 예외 / TypeError

#2. 예외 / ValueError

#3. 구문 오류 / SyntaxError

#4. 예외 / IndexError

 


+) 와 5주차 진짜 장난아니닼ㅋㅋㅋㅋㅋ 진짜 몇 시간동안 머리 싸매면서 이해하기 위해 고민하고 또 고민했다...

그래도 어찌저찌 끝까지 공부완료했다! 뿌듯뿌듯 ✨✨

다음 주가 마지막 주인데, 끝까지 잘 마무리하고 싶다. 마지막까지 화이팅~!!!! ✊🏻✊🏻

 

 

'코딩 공부 > 파이썬 (혼공단 11기)' 카테고리의 다른 글

혼공단 11기 활동 회고록🚩  (0) 2024.02.16
[혼공파] 6주차_07-2 ~ 08  (0) 2024.02.07
[혼공파] 4주차_05  (0) 2024.01.24
[혼공파] 3주차_04  (0) 2024.01.21
[혼공파] 2주차_02-3 ~ 03  (0) 2024.01.12