2021. 11. 25. 10:53ㆍPython
예외처리
: 오류가 발생했을 때 어떻게 할지 정하는 것으로
파이썬은 오류를 무시하고 싶을 때 try, except를 사용하여
예외적으로 오류를 처리할 수 있도록 해준다.
흔한 오류의 종류
FileNotFoundError : 없는 파일을 열려고 할 때
ZeroDivisionError : 0으로 나누려할 때
IndexError : 리스트에서 얻을 없는 값(인덱스)을 부를 때
오류 예외 처리 기법
try, except문
기본 구조는 다음과 같다.
try:
…
except [발생오류[as 오류 메세지 변수]]:
…
try 블록 수행 중 로류가 발생하면
except 블록이 수행되고,
try 블록에서 오류가 발생하지 않는다면
except 블록은 수행되지 않는다.
except [발생오류[as 오류 메세지 변수]]:
except 구문에서 [ ] 기호는 괄호 안의 내용을
생략할 수 있다는 관례 표기법이라 다음과
같이 3가지 방법으로 사용이 가능하다.
# 1 try, except만 쓰는 방법
try:
…
except:
…
# 2 발생 오류만 포함한 except문
try:
…
except 발생오류:
…
# 3 발생 오류와 오류 메세지 변수까지 포함한 excpet문
try:
…
except 발생오류 as 오류 메세지 변수:
…
예시 1 _
try:
4 / 0
except ZeroDivisionError as e:
print(e)
>>> division by zero
예시 2 _오류가 나지 않을 경우 else 실행
try:
f = open('none', 'r')
except FileNotFoundError as e:
print(str(e))
else:
data = f.read()
print(data)
f.close
try … finally
finally절은 try문 수행 도중 예외 발생 여부에
상관없이 항상 수행된다. 보통 finally절은 사용한
리소스를 close해야 할 때 많이 사용된다.
f = open('foo.txt' , 'w')
try:
# 무언가를 수행한다.
finally:
f.close()
이와 같이 foo.txt 파일을 쓰기 모드로 연 후
try문을 수행하고 예외 발생 여부에
상관없이 finally절에서 f.close()로
열린 파일을 닫을 수 있다.
여러 개의 오류 처리하기
# 1
try:
a = [1,2]
print(a[3])
4/0
excpet ZeroDicisionError:
print("0으로 나눌 수 없습니다.")
excpet IndecError:
print("인덱싱할 수 없습니다.")
>>> 인덱싱할 수 없습니다. # 인덱싱 오류가 먼저 발생했기 때문에
# 2
try:
a = [1,2]
print(a[3])
4/0
excpet ZeroDicisionError as e:
print(e)
excpet IndecError as e:
print(e)
>>> list index out of range
# 3
try:
a = [1,2]
print(a[3])
4/0
excpet (ZeroDicisionError, IndexError) as e:
print(e)
오류 회피하기
특정 오류가 발생할 경우 그냥 통과시켜야
할 때가 있다. pass를 사용하여 오류를 그냥
회피하도록 작성한 예제이다.
try:
r = open("나없는파일", 'r')
excpet FileNotFoundError:
pass
오류 일부러 발생시키기
프로그래밍을 하다 보면 종종 오류를
일부러 발생시켜야 할 경우도 생긴다.
파이썬은 raise 명령어를 사용하면
오류를 강제로 발생시킬 수 있다.
예를 들어 Bird 클래스를 상속받는
자식 클래스는 반드시 fly라는 함수를
구현하도록 만들고 싶은 경우.
class Bird:
def fly(self):
raise NotImplementedError
자식 클래스가 fly 함수를 구현하지
않은 상태로 fly 함수를 호출하면 반드시
Error가 뜰 것이다. 그러므로 fly 함수를
무조건 변형해서 사용하도록 강제를
걸어 놓는 것이다.
class Bird:
def fly(self):
raise NotImplementedError
class Eagle(Bird)"
def fly(self):
print("very fast")
eagle = Eagle()
eagle.fly()
이와 같이 부모 클래스와 자식 클래스에
같은 게 있으면 자식이 이기므로 이 경우엔
very fast가 출력된다.
내장함수
: 파이썬에서 기본적으로 포함하고 있는 함수
다 외울 필요는 없고 필요할 때마다
구글에 검색하길 추천
abs : 절댓값
all : 모두 참인지 검사
any : 하나라도 참이 있는가?
chr : ASCII(아스키 코드_0~127사이의 숫자를 각 문자에 대응) 코드를 입력받아 문자 출력
dir : 자체적으로 가지고 있는 변수나 함수를 보여줌
divmod : 몫과 나머지를 튜플 형태로 돌려줌
enumerate : 열거하다 - 사전처럼 인덱스와 함께 리스트 내의 내용을 열거해줌
eval : 실행 후 결과값을 돌려줌
filter : 함수를 통과하여 참인 것만 돌려줌
hex : 정수를 받아 16진수로 변환하여 돌려줌
id : 고유 주소 값
input : 사용자 입력 받는 함수
int : 10진수 정수 형태로 변환
isinstance : 첫 번째 인수로 인스턴스, 두 번째 인수로 클래스 이름을 받아 입력받은 인스턴스가 그 클래스의 인스턴스인지 판단하여 Treu/False를 돌려줌
len : 길이
list : 리스트로 변환
map : 각 요소가 수팽한 결과를 돌려줌
max : 최대 값
min : 최소 값
oct : 정수 형태의 숫자를 8진수 문자열로 돌려줌
open : 파일 이름과 읽기 방법을 입력받아 파일 객체를 돌려주는 함수
ord : 문자의 아스키 코드 값을 돌려주는 함수
pow : 제곱한 결과값 반환
range : 범위
round : 반올림
sorted : 정렬
str : 문자열 반환
sum : 리스트나 튜플의 모든 요소의 합
tuple : 튜블 변환
type : 타입을 출력
zip : 자료형을 묶어주는 역할
라이브러리
: 외장함수라고도 하며
import해서 사용하는 함수들을 말한다.
sys, pickle, time, radom 등이 있다.
구글링해서 사용하기(암기XXX)
몇 가지 예시만 들어보면
다음과 같다.
# python에서 수학 계산을 하기 위해 사용할 수 있는 함수들의 묶음, 라이브러리 호출
import math
# 차례로 절대값, 올림, 내림
print(abs(-2))
print(math.ceil(3.5))
print(math.floor(3.3))
# sin, cos
print(math.sin(1))
print(math.cos(1))
# 다양한 사전 만들기
from collections import defaultdict # 초기화가 되어있는 dict.
from collections import OrderedDict
D = defaultdict(int) # 0으로 deault 초기화
D2 = OrderedDict() # 저장(입력)한 순서 기억
D2['a'] = 1
D2['j'] = 14
…
'Python' 카테고리의 다른 글
[데이터분석 인강/Python 독학] 데이터 입출력(IO) (0) | 2022.06.26 |
---|---|
[Python 독학] 모듈, 패키지 (0) | 2021.11.12 |
[Python 독학] 클래스 ② (0) | 2021.07.07 |
[Python 독학] 클래스 ① (0) | 2021.07.07 |
[Python 독학] 파이썬 파일 읽고 쓰기 (0) | 2021.06.29 |