오늘 12월 29일 월요일 입니다. 오늘 아주 엄청난 일이 있었다. 내 Gram 충전기 고장... 하 내 4만원 원래 고장이 났었는데 그래도 충전이 됬었는데... 그만 임기를 다하고 갔습니다. 그래서 예 새로 구매했는데 내일 온답니다 그래서 오늘 기분이 안좋았다가 성적이 나왔는데 생각보다 잘 나와서 다시 기분이 좋아졌답니다. 그래서 오늘의 교훈 미리미리 사자
인자를 이름으로 지정하면 순서에 상관없이 전달할 수 있다.
def introduce(name, age, city):
print(f"저는 {city}에 사는 {age}살 {name}입니다.")
# 위치 인자 (순서 중요!)
introduce("철수", 25, "서울")
# 키워드 인자 (순서 상관없음!)
introduce(city="부산", name="영희", age=22)
# 혼합 사용 (위치 인자가 먼저!)
introduce("민수", city="대전", age=30)
파이썬은 변수를 찾을 때 다음 순서로 탐색
L : Local -> E : Enclosing -> G : Global -> B : Bulit-in
함수의 설명을 작성하는 문서화 문자열
def calculate_bmi(weight, height):
"""체질량지수(BMI)를 계산합니다.
Args:
weight (float): 체중 (kg)
height (float): 키 (m)
Returns:
float: BMI 수치
Examples:
>>> calculate_bmi(70, 1.75)
22.86
"""
bmi = weight / (height ** 2)
return round(bmi, 2)
# help() 함수로 확인
help(calculate_bmi)
# __doc__ 속성으로 확인
print(calculate_bmi.__doc__)
# 패키지 설치
pip install requests
# 특정 버전 설치
pip install requests==2.28.0
# 패키지 삭제
pip uninstall requests
# 설치된 패키지 목록
pip list
# 패키지 정보 확인
pip show requests
실무에서는 프로젝트에 필요한 패키지 목록을 파일로 관리
# 현재 설치된 패키지를 파일로 저장
pip freeze > requirements.txt
# 파일에 있는 패키지 한번에 설치
pip install -r requirements.txt
프로젝트마다 필요한 라이브러리 버전이 다를 수 있다.
하나의 Python에 모두 설치하면 버전 충돌이 발생
그래서 해결책은 가상 환경으로 프로젝트별 독립된 Python 환경을 만들어준다.
# 프로젝트 폴더로 이동
cd my_project
# 가상환경 생성 (venv라는 이름의 폴더가 생김)
python -m venv venv
# Windows
venv\Scripts\activate
활성화되면 터미널 앞에 (venv)가 표시됩니다.
3. 작업
# 가상환경 안에서 패키지 설치
(venv) pip install requests
# 이 패키지는 이 가상환경에만 설치됨!
deactivate
예외(Exception) : 프로그램 실행 중 발생하는 예상치 못한 상황
처리(Handling) : 그 상황을 대응하고 해결하는 것
try:
result = 10 / 0 # 문제가 생길 수 있는 코드
except ZeroDivisionError:
print("에러: 0으로 나눌 수 없습니다")
에러(Error)
예외(Exception)
try:
# 예외가 발생할 수 있는 코드
result = 10 / 0
except ZeroDivisionError as e:
# 특정 예외를 처리
print(f"0으로 나눌 수 없습니다: {e}")
except Exception as e:
# 모든 예외를 처리
print(f"알 수 없는 에러: {e}")
else:
# 예외가 발생하지 않았을 때만 실행
print("정상적으로 실행되었습니다")
finally:
# 예외 발생 여부와 관계없이 항상 실행
print("정리 작업을 수행합니다")
| 예외 타입 | 발생 상황 | 예시 |
|---|---|---|
ValueError | 잘못된 값 | int("abc") |
TypeError | 잘못된 타입 | "hello" + 5 |
ZeroDivisionError | 0으로 나누기 | 10 / 0 |
FileNotFoundError | 파일이 없음 | open("없는파일.txt") |
KeyError | 딕셔너리에 키가 없음 | dict["없는키"] |
IndexError | 인덱스 범위 초과 | list[100] |
def divide(a, b):
if b == 0:
raise ValueError("b는 0이 될 수 없습니다")
return a / b
try:
result = divide(10, 0)
except ValueError as e:
print(f"에러: {e}")
class InsufficientBalanceError(Exception):
"""잔액 부족 예외"""
pass
class BankAccount:
def __init__(self, balance):
self.balance = balance
def withdraw(self, amount):
if amount > self.balance:
raise InsufficientBalanceError(
f"잔액 부족: 현재 잔액 {self.balance}원, 요청 금액 {amount}원"
)
self.balance -= amount
return self.balance
# 사용 예시
account = BankAccount(10000)
try:
account.withdraw(15000)
except InsufficientBalanceError as e:
print(e)
이렇게 오늘배운 내용을 정리해보았습니다. 물론 많은 내용을 배웠지만 배운 내용들이 많아서 빼고 작성했습니다
출처 : https://github.com/ej31