이번 포스트에서는 파이썬의 예외 처리, 자주 쓰는 내장 함수, 라이브러리에 관해 공부해보자 :)
✔ 프로그래밍을 하다보면 오류가 발생 할 수 있다.
✔ 이러한 오류를 파이썬에서는 try, except를 이용해서 처리 할 수 있다.
✔ 파이썬에서의 대표적인 오류들은 FileNotFoundError, ZeroDivisionError, IndexError등이 있다.
✔ try, except문 - try 블록 수행 중 오류가 발생하면 except 블록 수행
# try, excpet문
try:
...
except [발생 오류 [as 오류 메시지 변수]]: #[]기호는 생략할 수 있다
try:
...
except:
...
try:
...
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)
✔ pass 사용
# 파일이 없어도 오류를 발생시키지 않고 통과
try:
f = open("없는 파일",'r')
except FileNotFoundError:
pass
✔ raise 명령어 사용
'''Bird 클래스를 상속받는 자식 클래스는
반드시 fly라는 함수를 구현하도록 만들고 싶은 경우'''
class Bird:
def fly(self):
raise NotImplementError
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)
abs(x) - x라는 숫자를 입력받으면, 절댓값을 돌려줌
all(x)
- 반복 가능한 자료형 x를 받는다.
- x가 모두 참이면 True 하나라도 거짓이 있으면 False 반환
>>> all([1,2,3,0]) # 숫자 0은 False이다.
False
>>> divmod(7,3)
(2,1)
>>> for i, name in enumerate(['body','foo','bar'])
print(i,name)
0 body
1 foo
2 bar
>>> eval('1+2')
3
>>> eval("'hi' + 'a'")
'hia'
>>> eval('divmod(4,3)')
(1,1)
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식과 동일
>>> int('11',2) # 2진수로 표현된 11의 10진수->3
3
>>> int('1A',16) # 16진수로 표현된 1A의 10진수->26
26
isinstance(object,class)
- 첫 번째 인수: 인스턴스, 두 번째 인수: 클래스
- 인스턴스가 클래스의 인스턴스인지 판단(참->True, 거짓->False)
len(s) - 입력값 s의 길이 구하기
list(s) - 반복 가능한 자료형 s를 리스틀로 만들어줌
map(f,iterable)
- 함수 f와 반복가능한 자료형 iterable을 입력 받음
- 입력 받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려줌
a,b = map(int,input().split())
>>> max([1,2,3])
3
>> max("python")
'y'
>>> min([1,2,3])
1
>> min("python")
'h'
open(filename, [mode])
- 파일 이름과 읽기 방법을 입력받아 파일 객체를 돌려줌
- w: 쓰기 모드로 파일 열기
- r: 읽기 모드로 파일 열기
- a: 추가 모드로 파일 열기
- b: 바이너리 모드로 파일 열기 (w,r,a와 함께 사용)
pow(x,y) - x의 y제곱
>>> pow(3,2)
9
>>> 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]
>>> 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')]
✔ 파이썬 사용자들이 만든 유용한 프로그램을 모아 놓은 것
✔ 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 리스트의 요소가 됨
>>> sys.exit()
>>> import sys
>>> sys.path
['','C:\\Windows\\SYSTEM32\\python37.zip','c:\\Python37\\DLLs',...]
# 파이썬 모듈들이 저장되어 있는 위치를 나타냄
# ''는 현재 디렉터리를 말함
>>> path_appned.py
import sys
sys.path.append("C:/doit/Mymod")
# 경로 이름 추가
✔ 객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈
>>> import pickle
>>> f = open("test.txt".'wb')
>>> data = {1: 'python',2: 'you need'}
>>> pickle.dump(data,f)
>>> f.close()
>>> import pickle
>>> f = open("test.txt".'rb')
>>> data = pckle.load(f)
>>> print(data)
[1: 'python',2: 'you need'}
✔ 환경 변수나 디렉터리, 파일등의 os 자원을 제어할 수 있게 해주는 모듈
1. os.environ - 현재 시스템의 환경 변수 값을 보여줌
>>> import os
>>> os.environ
environ({'PROGRMFILES': 'C:\\Program Files','APPDATA':...})
>>> os.chdir("C:\WINDOWS")
>>> os.getcwd()
'C:\WINDOWS' # 현재 디렉터리
>>> os.system("dir") # 현재 디렉터리에서 시스템 명령어 dir 실행
>>> f = os.popen("dir")
>>> print(f.read()) # 읽어 들인 파일 객체의 내용 보기
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))
✔ 파일을 복사해 주는 모듈
>>> import shutil
>>> shutil.copy("src.txt","dst.txt")
# src.txt파일의 내용을 dst.txt로 복사
✔ 특정 디렉터리의 모든 파일 이름을 보여주는 모듈
✔ *,? 메타 문자 사용 가능
>>> import glob
>>> glob.glob("c:/doit/mark*")
['c:/doit\\marks1.py','c:/doit\\marks2.py']
# doit 디렉터리에 있는 파일 중 이름이 mark로 시작하는 파일을 모두 찾아서 읽음
✔ 파일을 임시로 만들어서 사용할 때 쓰는 모듈
1. tempfile.mkstemp() - 중복되지 않는 임시파일의 이름을 무작위로 만들어 줌
>>> import tempfile
>>> filename = tempfile.mkstemp()
>>> filename
'C:\WINDOWS\TEMP\~-275151-0'
>>> import tempfile
>>> f = tempfile.TemporaryFile()
>>> f.close()
✔ 시간과 관련한 모듈
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'
time.strftime('출력할 형식 포캣 코드', time.localtime(time.time()))
>>> import time
for i in range(10):
print(i)
time.sleep(1)
✔ 달력을 볼 수 있는 모듈
1. calendar.calendar(연도) - 해당 연도의 전체 달력을 보여줌
2. calendar.prcal(연도) - 해당 연도의 전체 달력을 보여줌
>>> import calendar
>>> print(calendar.calendar(2023))
>>> calendar.prcal(2023)
>>> calendar.prmonth(2023,02) # 2023년의 2월 달력을 보여줌
# 0-월, 1-화, 2-수, 3-목, 4-금, 5-토, 6-일
>>> calendar.weekday(2023,02,01)
2 #수요일
>>> calendar.monthrange(2023,02)
(2,28) #수요일, 28일
✔ 난수를 발생시키는 모듈
✔ 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]
✔ 기본 웹 브라우저를 자동으로 실행하는 모듈
>>> import webbrower
>>> webbrowser.open("http://google.com")
# 이미 실행된 상태여도 새로운 창으로 해당 주소가 열림
>>> webbrowser.open_new("http://google.com")
이번 포스트까지해서 파이썬의 기초적인 부분들을 공부했다.
다음 포스트에서는 간단한 실습과 파이썬의 정규 표현식에 대해 알아보자:)
이전 포스트 Python-4 https://velog.io/@jiyoon2/Python-4
다음 포스트 Python-6 https://velog.io/@jiyoon2/Python-6