[파이썬] 점프 투 파이썬 - 예외 처리와 내장 함수

2023. 6. 15. 16:22공부한 내용/점프 투 파이썬

1. 예외 처리

1) 예외 처리 기법

(1) try, except문

*오류 처리를 위한 구분

-try 블록 수행 중 오류가 발생하면 except 블록 수행

-try 블록에서 오류가 발생하지 않으면 except 블록 미수행

try:
  ....
except [발생 오류 [as 오류 메시지 변수]]:  #[]기호: 괄호 안의 내용은 생략할 수 있다는 관례 표기 기법
  ....

 

*except 구문 사용법

-발생 오류와 오류 메시지 변수를 포함한 except 문: 오류가 발생했을 때 except문에 미리 정해 놓은 오류 이름과 일치할 때만 except 블록을 수행하고, 오류 메시지의 내용까지 알고 싶을 때 사용하는 방법

try:
  4 / 0
except ZeroDivisionError as e:
  print(e)
  
#> 결과: division by zero

 

(2) try ... finally

*finally 절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행됨

*보통 finally절은 사용한 리소스를 close해야 할 때에 많이 사용함

f = open("foo.txt", "w")
try:
  ....
finally:
  f.close()

 

(3) 여러 개의 오류 처리하기

*try문 안에서 여러 개의 오류를 처리하기 위한 방법

try:
  a = [1, 2]
  print(a[3])
except ZeroDivisionError:
  print("0으로 나눌 수 없습니다.")
except IndexError:
  print("인덱싱할 수 없습니다.")
  
  try:
  a = [1, 2]
  print(a[3])
  4 / 0
except (ZeroDivisionError, IndexError) as e:  #2개 이상의 오류를 동시에 처리하기 위해 괄호를 사용하여 함께 묶어 처리
  print(e)

 

2) 오류 회피하기

*특정 오류가 발생할 경우 그냥 통과시키는 방법

try:
  f = open("없는 파일", "r")
except FileNoFoundError:
  pass

-try문 안에서 FileNotFoundError가 발생할 경우에 pass를 사용하여 오류를 그냥 회피하도록 함

 

3) 오류 일부러 발생시키기

*raise 명령어를 사용해 오류를 강제로 발생시킬 수 있음

(ex) Bird 클래스를 상속받는 자식 클래스가 반드시 fly라는 함수를 구현하도록 하고 싶은 경우

-파이썬 내장 오류 NotImplementedError와 raise문 활용

-fly 함수를 구현하지 않은 상태로 fly 함수 호출 시 NotImplementedError 오류 발생

class Bird:
  def fly(self):
    raise NotImplementError
    
class Eagle(Bird):
  pass

eagle = Eagle()
eagle.fly()

#> Traceback (most recent call last):
#> File "...", line 33, in <module>
#> eagle.fly()
#> File "...", line 26, in fly
#>   raise NotImplementedError
#> NotImplementedError

 

4) 예외 만들기

*파이썬 내장 클래스인 Exception 클래스를 상속하여 생성 가능

(ex) 별명을 출력해주는 함수에서 MyError 사용하기

class MyError(Exception):
  pass

def say_nick(nick):
  if nick == "바보":
    raise MyError()
  print(nick)
#> 오류 발생


try:
  say_nick("천사")
  say_nick("바보")
except MyError:
  print("허용되지 않는 별명입니다.")
#> 천사
#> 허용되지 않는 별명입니다.


class MyError(Exception):
  def __str__(self):
    return "허용되지 않는 별명입니다."

try:
  say_nick("천사")
  say_nick("바보")
except MyError as e:
  print(e)
#> 천사
#> 허용되지 않는 별명입니다.

 

 

2. 내장 함수

*파이썬 내장 함수

*외부 모듈과 달리 import 등 기타 설정 없이 바로 사용 가능

(1) abs(x): x의 절댓값을 돌려주는 함수

(2) all(x): 반복 가능한(Iterable) 자료형 x가 모두 참이면 True, 하나라도 거짓이면 False 반환

(3) any(x): x가 모두 거짓이면 False, 하나라도 참이면 True 반환

(4) chr(x): 아스키(ASCII) 코드를 입력받아 코드에 해당하는 문자 반환

(5) dir(x): 객체가 자체적으로 가지고 있는 변수나 함수 반환

(6) divmod(a, b): a를 b로 나눈 몫과 나머지를 튜플 형태로 반환

(7) enumerate(x): 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체 반환

(8) eval(expression): 실행 가능한 문자열(expression)을 입력으로 받아 문자열을 실행한 결과값 반환. 문자열로 파이썬 함수나 클래스를 동적으로 실행할 때 사용

(9) filter(f, iterable): Iterable 자료형의 요소가 함수 f에 입력되었을 때 반환 값이 참인 것만 묶어서 반환

-lambda도 사용 가능

(10) hex(x): 정수 값을 입력받아 16진수로 변환

(11) id(object): object(객체)의 고유 주소 값 반환

(12) input([prompt]): 사용자 입력을 받는 함수, 문자열 인자 생략 가능. 매개변수로 문자열을 주면 프롬프트 띄움

(13) int(x): 문자열 형태의 숫자나 소수점이 있는 숫자 등을 정수 형태로 변환

(14) instance(object, class): object-인스턴스, class-클래스 이름. 인스턴스가 클래스의 인스턴스인지 판단하여 참이면 True, 거짓이면 False 반환

(15) len(x): 입력값의 길이(요소의 전체 개수) 반환

(16) list(iterable): Iterable 자료형을 리스트로 변환

(17) map(f, iterable): Iterable 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 반환

-lambda 활용 가능

(18) max(iterable): Iterable 자료형의 최대값 반환

(19) min(iterable): Iterable 자료형의 최소값 반환

(20) oct(x): 정수 형태의 숫자를 8진수 문자열로 변환

(21) open(filename, [mode]): filename: 파일 이름 / mode: 읽기 방법

-mode를 생략하면 기본값인 읽기 전용 모드(r)로 파일 객체 반환

b는 w, r, a와 함께 사용

모드 설명
w 쓰기 모드로 파일 열기
f 읽기 모드로 파일 열기
a 추가 모드로 파일 열기
b 바이너리 모드로 파일 열기

(22) ord(c): 문자의 아스키 코드 값 반환
(23) pow(x, y): x의 y 제곱한 결과값 반환

(24) range([start,] stop [,step]): 입력받은 숫자에 해당하는 범위 값을 반환

-인수가 하나일 경우: 시작 숫자를 지정해 주지 않으면 0부터 시작

-인수가 2개일 경우: 시작 숫자와 끝 숫자로, 끝 숫자는 해당 범위에 포함되지 않음

-인수가 3개일 경우: 세 번째 인수는 숫자 사이의 거리

(25) round(number [,ndigits]): 숫자를 입력받아 반올림해주는 함수

-ndigits: 반올림하여 표시하고 싶은 소수점의 자리수

(26) sorted(iterable): 입력값을 정렬한 후 그 결과를 리스트로 반환

(27) str(object): 객체를 문자열 형태로 변환

(28) sum(iterable): 리스트나 튜플의 모든 요소의 합 반환

(29) tuple(iterable): Iterable 자료형을 튜플 형태로 변환

(30) type(object): 입력값의 자료형 반환

(31) zip(*iterable): 동일한 개수로 이루어진 자료형을 묶어주는 역할을 하는 함수