06-1 구문 오류와 예외
구문 오류: 프로그램 실행 전 발생하는 오류. SyntaxError
+) 들여쓰기 오류인 IndentationError도 구문 오류로 예외처리를 할 수 없다.
예외 / 런타임 오류: 프로그램 실행 중 발생하는 오류
예외 처리
1. 조건문 사용(기본 예외 처리)
2. try 구문 사용
try except 구문
try:
예외가 발생할 가능성이 있는 코드
except:
예외가 발생했을 때 실행할 코드
except에 pass 키워드 넣어서 예외는 처리하되 프로그램이 강제 종료되는 것을 막는다.
try except else 구문
else: 에는 예외가 발생하지 않았을 때 실행할 코드를 넣는다.
*else구문은 무조건 except 구문 뒤에 사용한다.
fianlly 구문
예외 발생 여부와 상관없이 무조건 실행한다.
반복문 또는 함수 내부에 있을 때 유용
반복문의 break, 함수 내부 try 구문의 return을 만나면 반복문과 함수가 종료되어 뒤의 코드들이 실행되지 않는다.
다만 finally 구문에 있는 코드는 반드시 실행되기 때문에 close()등 break, return 후에도
실행되어야 할 코드를 반드시 실행시킬 수 있다.
06-2 예외 고급
예외 객체
try:
예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
예외가 발생했을 때 실행할 구문
예외 객체를 통해 에러에 대한 정보를 확인할 수 있다.
ex) print('에러 정보:', 변수 이름)
이 때 예외의 종류를 알지 못한다면 Exception 이라는 예외 클래스를 사용한다.
여러가지 예외가 발생할 수 있는 상황에선
try:
예외가 발생할 가능성이 있는 구문
except 예외 종류 A:
예외 A가 발생했을 때 실행할 구문
except 예외 종류 B:
예외 B가 발생했을 때 실행할 구문
except 예외 종류 C:
예외 C가 발생했을 때 실행할 구문
보통 마지막 except 구문에서 Exception 클래스를 사용해 위의 except 구문에서 걸러내지 못한 예외를 잡아내서
프로그램이 강제 종료되지 않게 한다.
▶raise 구문
pass 키워드는 '아무것도 안함'을 의미하는 키워드인 반면
raise 키워드는 '아직 구현되지 않았으므로 예외를 강제로 발생시킴'을 의미하는 키워드이다.
07-1 표준 모듈
모듈: 여러 변수와 함수를 가지고 있는 집합체
표준 모듈: 파이썬에 기본적으로 내장 외부 모듈: 다른 사람이 만들어서 공개한 모듈
import 외부 모듈 이름
ex) import math // math.sin(1)
from 모듈 이름 import 가져오고 싶은 변수/함수
ex) from math import sin // sin(1)
모두 가져오기 from math import *
import 모듈 as 사용하고 싶은 식별자
ex) import math as m // m.sin(1)
random 모듈
random.random() random.uniform() random.randrange() random.choice([]) random.shuffle([])
sys 모듈
시스템과 관련된 정보를 가지고 있는 모듈. 명령 매개변수를 받을 때 많이 사용
os 모듈
운영체제와 관련된 기능을 가진 모듈. 디렉토리 수정, 확인
datetime 모듈
날짜, 시간과 관련된 모듈 // datetime.datetime.now()
time 모듈
time.sleep() 특정 시간 동안 코드 진행 정지
urllib 모듈
인터넷 주소를 활용하는 라이브러리
**print("{} {} {}".format(*"가나다")
위와 문자열, 리스트 등 앞에 *를 붙이면 요소 하나하나가 매개변수로 저장됨.
07-2 외부 모듈
#현재 개발 환경인 replit에선 별도의 pip install 없이 import 코드만 쳐도 자동으로 외부 모듈을 설치해준다.
구분 | 설명 |
라이브러리 | 정상적인 제어 |
프레임워크 | 제어 역전 발생 |
▶라이브러리: 개발자가 모듈의 기능을 호출
재사용성 - 특정 기능을 수행하는 코드를 미리 작성 후 필요할 때 호출하여 재사용
제어 흐름 - 제어 흐름이 사용자(개발자)에 있음
작고 단일 목적 - 보통 하나, 관련된 단일 목적의 기능 제공
▶프레임워크: 모듈이 개발자가 작성한 코드를 실행하는 형태의 모듈
통합성 - 전체 어플리케이션 구조 제어 및 다양한 기능 통합적 제공
제어 역전 - 제어 흐름이 프레임워크에 있음
광범위한 기능 - 데이터베이스 , URL 라우팅, 세션 관리 등 다양한 기능 제공
-------------------------------------------------------------------------------------------------
▶함수 데코레이터
데코레이터: 함수를 수정하거나 확장하는 방법
함수(메서드)를 인자로 받아 수정된 새로운 함수를 반환. 코드의 반복을 줄이고 함수의 동작을 재사용 가능하게 한다.
@decorator_exp
def some_func():
print("하세요")
def some_func():
print("하세요")
some_func = decorator_exp(some_func)
데코레이터를 사용하면 위의 두 코드가 같은 역할을 한다.
def my_decorator(func):
def wrapper(*args,**kwargs):
print("안녕")
result = func(*args,**kwargs)
print("^^")
return result
return wrapper
@my_decorator
def hi(name):
print(name)
hi("철수야")
# 안녕 철수야 ^^
위와 같이 데코레이터가 매개변수를 가질 수 있다.
--------------------------------------------------------------------------------------------
+함수 인자의 *args와 **kwargs가 궁금해져서 알아보았다.
인자 argument와 키워드인자 keyword argument의 약자로,
*args: 가변적인 위치 인자들을 튜플 형태로 받음
**kwargs: 가변적인 키워드 인자들을 딕셔너리 형태로 받음
def hi(name):
print(name)
hi("철수")
name은 단일 인자이므로 *args에,
def hi(name="철수"):
print(name)
hi()
기본인자는 키워드 인자로 처리되므로 **kwargs에 전달된다.
07-3 모듈 만들기
__name__:
프로그램의 진입점(엔트리 포인트 / 메인)에서의 __name__은 __main__
모듈에서의 __name__은 __모듈명__
if __name__ == "__main__":
#사용할 코드
위와 같이 현재 파일이 엔트리 포인트인지 확인하고, 엔트리 포인트일 때만 실행하는 코드를 작성 가능
▶패키지: 여러 모듈을 하나의 디렉토리에 모아둔 것. 모듈들의 계층 구조를 형성, 기능을 그룹화하여 구성
__init__.py 파일로 초기화, import * 등을 처리할 수 있다.
▶텍스트 데이터, 바이너리 데이터
텍스트 데이터: 우리가 쉽게 읽을 수 있는 형태
- 용량이 큼
바이너리 데이터: 텍스트 에디터로 열었을 때 의미를 알 수 없는 데이터
- 이미지, 동영상 파일 등
- 용량이 작고 텍스트 에디터로 편집하기 어려움
인코딩: 숫자와 알파벳을 대응하는 방식으로 텍스트 데이터, 바이너리 데이터를 변환하는 방법
디코딩: 인코딩된 데이터를 반대로 돌리는 것
'Lauguage > Python' 카테고리의 다른 글
[Python] GIL (Global Interpreter Lock) (0) | 2024.06.11 |
---|---|
[Python] [혼자 공부하는 파이썬] Chapter 8. 클래스 (0) | 2024.06.10 |
[Python] [혼자 공부하는 파이썬] Chapter 5. 함수 (1) | 2024.06.06 |
[Python] 객체, Iterator, Generator (1) | 2024.06.05 |
[Python] [혼자 공부하는 파이썬] Chapter 1~4 (1) | 2024.06.03 |