#5 예외처리 / 내장 함수 / 라이브러리

JIY00N·2023년 2월 1일
0

Python

목록 보기
5/9
post-thumbnail

2023.02.01

0. 시작하기전

이번 포스트에서는 파이썬의 예외 처리, 자주 쓰는 내장 함수, 라이브러리에 관해 공부해보자 :)

1. 예외 처리

✔ 프로그래밍을 하다보면 오류가 발생 할 수 있다.
✔ 이러한 오류를 파이썬에서는 try, except를 이용해서 처리 할 수 있다.
✔ 파이썬에서의 대표적인 오류들은 FileNotFoundError, ZeroDivisionError, IndexError등이 있다.

1-1 오류 처리 기법

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

# try, excpet문
try:
	...
except [발생 오류 [as 오류 메시지 변수]]: #[]기호는 생략할 수 있다
  1. try, except만 쓰는 방법
    - 오류 종류에 상관없이 오류가 발생하면 except블록 수행
try:
	...
except:
	...
  1. 발생 오류만 포함한 except문
    - except문의 오류 이름과 일치할 때만 수행
try:
	...
except 발생오류:
	...
  1. 발생 오류 + 오류 메시지 변수를 포함한 except문
    - except문의 오류 이름과 일치하고, 오류 메시지까지 알고 싶을 때 사용
try:
	...
except 발생오류 as 오류 메시지 변수:
	...

✔ try ... finally - finally절은 예외 발생 여부와 상관 없이 항상 수행, 사용한 리소스를 close 할 때 많이 사용

f = open('foo.txt','w')
try:
	# 무언가를 수행
finally:
	f.close()

✔ 여러개의 오류 처리하기 - 괄호로 처리

try:
	a=[1,2]
    print(a[3])
    4/0
except (ZeroDivisionError, IndexError) as e:
	print(e)

1-2 오류 회피하기

✔ pass 사용

# 파일이 없어도 오류를 발생시키지 않고 통과
try:
	f = open("없는 파일",'r')
except FileNotFoundError:
	pass

1-3 오류 발생시키기

✔ raise 명령어 사용

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

class Bird:
	def fly(self):
    	raise NotImplementError

1-4 예외 만들기

class MyError(Exception): # Exception클래스 상속
	def __str__(self): # __str__: 오류 메시지를 print문으로 출력할때 쓰는 메서드
    	return "허용되지 않는 별명입니다."
        
def say_nick(nick):
	if nick == '바보':
    	raise MyError()
    print(nick)
    
try:
	say_nick("천사")
    say_nick("바보")
except MyError as e:
	print(e)

2. 내장 함수

  1. abs(x) - x라는 숫자를 입력받으면, 절댓값을 돌려줌

  2. all(x)
    - 반복 가능한 자료형 x를 받는다.
    - x가 모두 참이면 True 하나라도 거짓이 있으면 False 반환

>>> all([1,2,3,0]) # 숫자 0은 False이다.
False
  1. any(x) - x중 하나라도 참이 있으면 True, 모두 거짓이면 False 반환
  2. chr(i) - 아스키코드 값을 문자로 반환
  3. ord - 문자의 아스키코드 값을 반환
  4. dir - 객체가 자체적으로 가지고 있는 변수나 함수를 보여줌
  5. divmod(a,b)
    - 2개의 숫자를 입력받음
    - a를 b로 나눈 몫과 나머지를 튜플 형태로 반환
>>> divmod(7,3)
(2,1)
  1. enumerate
    - 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 돌려줌
    - 객체가 현재 어느 위치에 있는지 알려주는 인덱스 값이 필요할 때 사용
>>> for i, name in enumerate(['body','foo','bar'])
		print(i,name)
0 body
1 foo
2 bar
  1. eval(expression) - 실행 가능한 문자열을 입력받아 문자열 실행 값을 돌려줌
>>> eval('1+2')
3
>>> eval("'hi' + 'a'")
'hia'
>>> eval('divmod(4,3)')
(1,1)
  1. filter(함수이름, 함수에 들어갈 반복 가능한 자료형)
    - 두 번째 인수인 반복 가능한 자료형 요소가 첫 번째 인수인 함수에 입력되었을때 반환 값이 참인 것만 묶어서 반환
def positive(x):
	return x>0
print(list(filter(positive, [1,-3,2,0,-5,6])))
[1,2,6]

list(filter(lambda x: x>0, [1,-3,2,0,-5,6])) # 위의 print식과 동일
  1. hex(x) - 정수 값(x)를 입력 받아 16진수로 반환
  2. oct(x) - 정수 형태의 숫자를 8진수 문자열로 반환
  3. id(object) - 객체를 입력 받아 객체의 고유 주소값을 반환
  4. input() - 사용자 입력 함수
  5. int(x)
    - 문자열 형태의 숫자나 소수를 정수로 반환
    - int(x,radix) - radix 진수로 표현된 문자열 x를 10진수로 반환
>>> int('11',2) # 2진수로 표현된 11의 10진수->3
3
>>> int('1A',16) # 16진수로 표현된 1A의 10진수->26
26
  1. isinstance(object,class)
    - 첫 번째 인수: 인스턴스, 두 번째 인수: 클래스
    - 인스턴스가 클래스의 인스턴스인지 판단(참->True, 거짓->False)

  2. len(s) - 입력값 s의 길이 구하기

  3. list(s) - 반복 가능한 자료형 s를 리스틀로 만들어줌

  4. map(f,iterable)
    - 함수 f와 반복가능한 자료형 iterable을 입력 받음
    - 입력 받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려줌

a,b = map(int,input().split())
  1. max(iterable), min(iterable) - 반복 가능한 자료형을 받아 최대, 최소를 반환
>>> max([1,2,3])
3
>> max("python")
'y'
>>> min([1,2,3])
1
>> min("python")
'h'
  1. open(filename, [mode])
    - 파일 이름과 읽기 방법을 입력받아 파일 객체를 돌려줌
    - w: 쓰기 모드로 파일 열기
    - r: 읽기 모드로 파일 열기
    - a: 추가 모드로 파일 열기
    - b: 바이너리 모드로 파일 열기 (w,r,a와 함께 사용)

  2. pow(x,y) - x의 y제곱

>>> pow(3,2)
9
  1. range(start, stop, step) - 해당 범위 값을 반복 가능한 객체로 반환
>>> list(range(5))
[0,1,2,3,4]
>>> list(range(5,10))
[5,6,7,8,9]
>>> list(range(1,10,2))
[1,3,5,7,9]
  1. round(x) - 반올림 해주는 함수
  2. sorted(x) - 입력 값을 정렬한 후 리스트로 반환
  3. str(object) - 문자열 형태로 객체를 반환
  4. sum(iterable) - 입력받은 리스트나 튜플의 모든 요소의 합 반환
  5. tuple(iterable) - 반복 가능한 자료형을 입력받아 튜플 형태로 반환
  6. type(object) - 입력값의 자료형이 무엇인지 알려줌
  7. zip(*iterable) - 동일한 개수로 이루어진 자료형을 묶어줌
>>> list(zip([1,2,3],[4,5,6],[7,8,9])
[(1,4,7),(2,5,8),(3,6,9)]

>>> list(zip("abc","def"))
[('a','d'),('b','e'),('c','f')]

3. 라이브러리

✔ 파이썬 사용자들이 만든 유용한 프로그램을 모아 놓은 것

3-1. sys

✔ sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어 가능하게 함
1. sys.argv - 명령 행에서 인수 전달하기

# argv_test.py
import sys
print(sys.argv)
C:/doit/Mymod>python argv_test.py you need python
['argv_test.py','you','need','python']
# python 명령어 뒤의 모든 것들이 공백을 기준으로 나뉘어 sys.argv 리스트의 요소가 됨
  1. sys.exit - 강제로 스크립트 종료하기
>>> sys.exit()
  1. sys.path - 자신이 만든 모듈 불러와 사용하기
>>> import sys
>>> sys.path
['','C:\\Windows\\SYSTEM32\\python37.zip','c:\\Python37\\DLLs',...]
# 파이썬 모듈들이 저장되어 있는 위치를 나타냄
# ''는 현재 디렉터리를 말함
  1. sys.path.append - 경로 추가
>>> path_appned.py
import sys
sys.path.append("C:/doit/Mymod")
# 경로 이름 추가

3-2. pickle

✔ 객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈

  1. dump - 딕셔너리 객체인 data를 그대로 파일에 저장
>>> import pickle
>>> f = open("test.txt".'wb')
>>> data = {1: 'python',2: 'you need'}
>>> pickle.dump(data,f)
>>> f.close()
  1. load - 딕셔너리 객체 상태 그대로 불러옴
>>> import pickle
>>> f = open("test.txt".'rb')
>>> data = pckle.load(f)
>>> print(data)
[1: 'python',2: 'you need'}

3-3. os

✔ 환경 변수나 디렉터리, 파일등의 os 자원을 제어할 수 있게 해주는 모듈
1. os.environ - 현재 시스템의 환경 변수 값을 보여줌

>>> import os
>>> os.environ
environ({'PROGRMFILES': 'C:\\Program Files','APPDATA':...})
  1. os.chdir - 현재 디렉터리 위치를 변경
>>> os.chdir("C:\WINDOWS")
  1. os.getcwd - 현재 자신의 디렉터리 위치 반환
>>> os.getcwd()
'C:\WINDOWS' # 현재 디렉터리
  1. os.system - 시스템 명령어 호출
>>> os.system("dir") # 현재 디렉터리에서 시스템 명령어 dir 실행
  1. os.popen - 시스템 명령어를 실행한 결괏값을 읽기 모드 형태의 파일 객체로 반환
>>> f = os.popen("dir")
>>> print(f.read()) # 읽어 들인 파일 객체의 내용 보기
  1. os.walk - 시작 디렉터리부터 하위 모든 디렉터리를 차례대로 방문하는 함수
import os

for (path, dir, files) in os.walk("C:/")
	 for filename in files:
     	ext = os.path.splitext(filename)[-1]
        if ext == '.py':
        print("%s/%s" % (path,filename))
  1. 기타 함수
    ✔ os.mkdir(디렉터리) - 디렉터리 생성
    ✔ os.rmkdir(디렉터리) - 디렉터리 삭제 (단, 비어있어야 함)
    ✔ os.unlink(파일이름) - 파일을 지움
    ✔ os.rename(src,dst) - src라는 이름의 파일을 dst로 변경
    ✔ os.listdir(디렉터리) - 디렉터리에 있는 파일들의 리스트 구함
    ✔ os.path.splitext(파일이름) - 파일이름을 확장자를 기준으로 두 부분으로 나눔
    - os.path.splitext(파일이름)[-1] # 해당 파일의 확장자 이름 ex).py

3-4. shutil

✔ 파일을 복사해 주는 모듈

>>> import shutil
>>> shutil.copy("src.txt","dst.txt")
# src.txt파일의 내용을 dst.txt로 복사

3-5. glob

✔ 특정 디렉터리의 모든 파일 이름을 보여주는 모듈
✔ *,? 메타 문자 사용 가능

>>> import glob
>>> glob.glob("c:/doit/mark*")
['c:/doit\\marks1.py','c:/doit\\marks2.py']
# doit 디렉터리에 있는 파일 중 이름이 mark로 시작하는 파일을 모두 찾아서 읽음

3-6. tempfile

✔ 파일을 임시로 만들어서 사용할 때 쓰는 모듈
1. tempfile.mkstemp() - 중복되지 않는 임시파일의 이름을 무작위로 만들어 줌

>>> import tempfile
>>> filename = tempfile.mkstemp()
>>> filename
'C:\WINDOWS\TEMP\~-275151-0'
  1. tempfile.TemporaryFile()
    - 임시 저장 공간으로 사용할 파일 객체를 반환(기본 값=wb)
    - f.close()가 호출되면 사라짐
>>> import tempfile
>>> f = tempfile.TemporaryFile()
>>> f.close()

3-7. time

✔ 시간과 관련한 모듈
1. time.time - 현재 시간을 실수 형태로 반환(초 단위)
2. time.localtime - time.time이 반환한 값을 연도, 월, 일, 시, 분,초..의 형태로 반환
3. time.asctime
- time.localtime에 의해 반환된 튜플 형태의 값을 인수로 받아서 날짜와 시간을 알아보기 쉽게 반환
4. time.ctime - 현재 시간을 반환

>>> import time
>>> time.time()
988458015.73417199

>>> time.localtime(time.time())
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=21, tm_hour=16,
tm_min=48, tm_sec=42, tm_wday =1, tm_yday=141, tm_isdst=0)

>>> time.asctime(time.localtime(time.time()))
'Sat Apr 28 20:50:20 2001'

>>> time.ctime()
'Wen Feb 01 21:09:20 2023'
  1. time.strftime - 시간에 관계된 것을 세밀하게 표현(포맷코드 사용) pg.254
time.strftime('출력할 형식 포캣 코드', time.localtime(time.time()))
  1. time.sleep - 주로 루프에서 사용, 일정한 시간 간격을 두고 루프 실행
>>> import time
for i in range(10):
	print(i)
    time.sleep(1)

3-8. calendar

✔ 달력을 볼 수 있는 모듈
1. calendar.calendar(연도) - 해당 연도의 전체 달력을 보여줌
2. calendar.prcal(연도) - 해당 연도의 전체 달력을 보여줌

>>> import calendar
>>> print(calendar.calendar(2023))
>>> calendar.prcal(2023)

>>> calendar.prmonth(2023,02) # 2023년의 2월 달력을 보여줌
  1. calendar.weekday(연도, 월, 일) - 해당 날짜의 요일 정보 반환
# 0-월, 1-화, 2-수, 3-목, 4-금, 5-토, 6-일
>>> calendar.weekday(2023,02,01)
2 #수요일
  1. calendar.monthrange(연도, 월) - 입력받은 달의 1일이 무슨 요일인지와 그 달의 마지막 일을 튜플 형태로 반환
>>> calendar.monthrange(2023,02)
(2,28) #수요일, 28일

3-9. random

✔ 난수를 발생시키는 모듈
✔ random, randiant, choice, shuffle

>>> import random
# random 0에서 1사이의 실수
>>> random.random()
0.5384248...

# randiant 1에서 100 사이의 정수 중 난수
>>> random.randint(1,100)

# choice 입력으로 받은 리스트에서 무작위로 하나를 선택하여 돌려줌
def random_pop(data):
	number = random.choice(data)
    data.remove(number)
    return number

# shuffle 리스트의 항목 무작위로 섞기
>>> import random
>>> data = [1,2,3,4,5]
>>> random.shuffle(data)
>>> data
[5,1,3,4,2]

3-10. webbrowser

✔ 기본 웹 브라우저를 자동으로 실행하는 모듈

>>> import webbrower
>>> webbrowser.open("http://google.com")
# 이미 실행된 상태여도 새로운 창으로 해당 주소가 열림
>>> webbrowser.open_new("http://google.com")

4. To be continued..

이번 포스트까지해서 파이썬의 기초적인 부분들을 공부했다.
다음 포스트에서는 간단한 실습과 파이썬의 정규 표현식에 대해 알아보자:)

이전 포스트 Python-4 https://velog.io/@jiyoon2/Python-4
다음 포스트 Python-6 https://velog.io/@jiyoon2/Python-6

profile
블로그 이전 했습니다. https://yoon-log.vercel.app/

0개의 댓글