6장 예외 처리
1. 구문 오류와 예외
1) 확인 문제 379 p
* 1번 (구문 오류와 예외 처리의 차이점은?) // Syntax Error & Exception 에러
구문 오류는 if 조건을 걸어서 특정 상황이 되었을 때 에러 처리를 하는 것이지만 (코드 자체 에러)
예외 처리는 if 조건과 상관 없이 특정 조건이 아닐 경우 이외의 상황을 모두 예외 처리를 하여
에러를 무시하는 방법이다. (예외 상황 에러)
# 구문 오류
if x > 0
print("x는 양수입니다.")
위의 코드는 if문이 끝나는 콜론(:)이 빠져 구문 오류(Syntax Error)가 발생합니다.
파이썬의 문법에 맞지 않는 부분이 있어 코드를 실행하기 전에 수정이 필요합니다.
# 예외 처리
try:
x = 10
if x > 0:
print("x는 양수입니다.")
except:
print("예외가 발생하였습니다.")
위의 코드는 예외 처리를 통해 예외 상황에 대한 대응을 미리 정의한 예시입니다. try-except 구문을 사용하여 예외가 발생할 수 있는 부분을 감싸고, 예외가 발생하면 except 블록이 실행되어 예외 상황에 대한 처리를 수행합니다. 예외 처리를 통해 예외가 발생하더라도 프로그램이 비정상적으로 종료되지 않고 계속 실행될 수 있도록 합니다.
* 2번 (예외 처리를 통한 출력) // try - except ValueError - finally
# 380p 문제 예외처리 // try - except ValueError - finally
numbers = [52,273,32,103,90,10,275]
print("#(1) 요소 내부에 있는 값 찾기")
print("-{}는 {} 위치에 있습니다.".format(52,numbers.index(52)))
print()
print("#(2) 요소 내부에 없는 값 찾기")
number = 10000
try:
print("-{}는 {} 위치에 있습니다.".format(number,numbers.index(number)))
except ValueError:
print("-리스트 내부에 없는 값입니다.")
print()
finally: # 생략가능
print("--- 정상적으로 종료되었습니다 ---")
* 2번 (예외 처리를 통한 출력) // if - else
# 380p 문제 예외처리 // if - else
numbers = [52,273,32,103,90,10,275]
print("#(1) 요소 내부에 있는 값 찾기")
print("-{}는 {} 위치에 있습니다.".format(52,numbers.index(52)))
print()
print("#(2) 요소 내부에 없는 값 찾기")
number = 10000
if number in numbers:
print("-{}는 {} 위치에 있습니다.".format(number,numbers.index(number)))
else : # 나머지, 값이 존재하지 않는 경우
print("-리스트 내부에 없는 값입니다.")
print()
print("--- 정상적으로 종료되었습니다 ---")
* 3번
# 381p 문제 정답 찾기
# 1번 -> 예외 (TypeError)
output = 10 + "개"
# 2번 -> 예외 (ValueError)
int("안녕하세요")
# 3번 -> 구문 오류 (SyntaxError)
cursor.close)
# 4번 -> 예외 (IndexError)
[1,2,3,4,5][10]
# 381p 문제 3번 수정
# 1
output = "10" + "개"
print(output)
# 2번
print(int("10"))
# 3번
# cursor.close()
# 4번
[1,2,3,4,5][4]
2. 예외 고급
1) 예외 객체
* 빈칸 입력시
* 문자 입력시
# 예외객체
try:
no = input("정수 입력>")
no = int(no)
print("원의 반지름", no)
print("원의 둘레", 2 * 3.14 * no)
print("원의 넓이", 3.14 * no * no)
except Exception as exception:
print("예외 종류:",type(exception))
print("예외 객체:",exception)
2) 예외 구분하기 (여러가지 예외 상황)
* 빈칸
* 문자
*리스트에 없는 숫자
# 여러가지 예외 상황 만들기
a = [1,2,3,4,5]
try:
# 예외1 : 숫자로 변환할 수 없는 값을 입력한 경우
b = int(input("정수입력>"))
# 예외1 : 리스트에 없는 인덱스 번호 값(정수)을 입력한 경우
print("{}번째 요소는 {}".format(b,a[b]))
except Exception as exception:
print("예외 종류:",type(exception))
print("예외 객체:",exception)
3) 예외 구분하기 2
* IndexError
# 예외 구분해서 문장 만들기
a = [1,2,3,4,5] # 인덱스 번호 0 ~ 4
try:
# 예외1 : 숫자로 변환할 수 없는 값을 입력한 경우
b = int(input("정수입력>"))
# 예외1 : 리스트에 없는 인덱스 번호 값(정수)을 입력한 경우
print("{}번째 요소는 {}".format(b,a[b]))
except ValueError:
print("정수를 입력하세요.")
except IndexError:
print("리스트의 인덱스를 벗어났습니다.")
*예외 객체 정보 출력 1
# 예외 구분해서 문장 만들기
a = [1,2,3,4,5] # 인덱스 번호 0 ~ 4
try:
# 예외1 : 숫자로 변환할 수 없는 값을 입력한 경우
b = int(input("정수입력>"))
# 예외1 : 리스트에 없는 인덱스 번호 값(정수)을 입력한 경우
print("{}번째 요소는 {}".format(b,a[b]))
except ValueError as exception:
print("정수를 입력하세요.")
print("예외 객체:",exception)
except IndexError as exception:
print("리스트의 인덱스를 벗어났습니다.")
print("예외 객체:",exception)
*예외 객체 정보 출력 2 (인덱스 값을 입력해도 오류가 나오는 경우)
# 우리가 예상하지 못한 예외 처리
a = [1,2,3,4,5] # 인덱스 번호 0 ~ 4
try:
# 예외1 : 숫자로 변환할 수 없는 값을 입력한 경우
b = int(input("정수입력>"))
# 예외2 : 리스트에 없는 인덱스 번호 값(정수)을 입력한 경우
print("{}번째 요소는 {}".format(b,a[b]))
# 예외3 : 우리가 예상하지 못하는 예외
예외.발생해주세요()
except ValueError as exception:
print("정수를 입력하세요.")
print("예외 객체: ",exception)
except IndexError as exception:
print("리스트의 인덱스를 벗어났습니다.")
print("예외 객체: ",exception)
except Exception as exception:
print("예외 종류: ", type(exception))
print("예외 객체: ",exception)
4) 강제로 예외 발생 _ raise 구문
# 강제 종료를 막는 예외 처리 (raise 구문)
# 입력을 받습니다.
number = input("정수 입력>")
number = int(number)
# 조건문 사용
if number > 0:
# 양수일 때 : 아직 미구현 상태입니다.
raise NotImplementedError
else:
# 음수일 때 : 아직 미구현 상태입니다.
raise NotImplementedError
7장 모듈
1. 표준 모듈
1) math
* 모듈 불러오기
# 모듈 불러오기
import math
# 다양한 math 함수들
print(math.sin(1))
print(math.cos(1))
print(math.tan(1))
print(math.floor(3.14))
print(math.ceil(3.14))
* 모듈의 별칭 설정
# 모듈의 별칭 설정
import math as m
print(m.sin(1))
print(m.cos(1))
print(m.tan(1))
print(m.floor(3.14))
print(m.ceil(3.14))
* 함수 이름만 사용하고 싶을 때
# 함수 이름만 사용하고 싶을 때
from math import sin,cos,tan,floor,ceil
print(sin(1))
print(cos(1))
print(tan(1))
print(floor(3.14))
print(ceil(3.14))
2) random
import random
print("# random 모듈")
print("- random(): ", random.random())
print("- uniform(10,20):", random.uniform(10,20))
print("- randrange(10)", random.randrange(10)) # int
print("- randrange(10,20)", random.randrange(10, 20)) # int
print("- choice([1,2,3,4,5])", random.choice([1,2,3,4,5]))
print("- shuffle([1,2,3,4,5])", random.shuffle([1,2,3,4,5]))
print("- sample([1,2,3,4,5])", random.sample([1,2,3,4,5], k=2))
print("- shuffle([1,2,3,4,5])", random.shuffle([1,2,3,4,5]))
a = [1,2,3,4,5]
random.shuffle(a)
print(a)
4) os 모듈
import os
print("현재 운영체제: ", os.name)
print("현재 폴더: ", os.getcwd())
print("현재 폴더 내부의 요소: ", os.listdir())
os.mkdir("hello")
os.rmdir("hello")
with open("source.txt","w") as file:
file.write("안녕 파이썬 아직도 하고 있니")
os.rename("source.txt","new.txt")
os.remove("new.txt")
os.system("dir")
5) datetime 모듈
import datetime
print("현재 시간 출력하기")
now = datetime.datetime.now()
print(now.year, "년")
print(now.month, "월")
print(now.day, "일")
print(now.hour, "시")
print(now.minute, "분")
print(now.second, "초")
*현재 날짜 시간을 포맷 맞춰서 출력
# 현재 날짜 시간을 포맷 맞춰서 출력
a = "{}년 {}월{}일 {}시 {}분 {}초".format(now.year,
now.month,
now.day,
now.hour,
now.minute,
now.second)
print(a)
b = now.strftime("%Y.%m.%d %H:%M:%S")
print(b)
c = now.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초")
print(c)
# 특정 시간 이후 날짜 시간 출력
import datetime
now = datetime.datetime.now()
print("datetime.timedelta 로 시간 더하기")
after = now + datetime.timedelta(weeks = 1,
days = 1,
hours = 1,
minutes = 1,
seconds = 1)
print(now)
print(after)
print(after.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초"))
print("# now.replace()로 1년 더하기")
after_oneyear = now.replace(year = (now.year + 1))
print(after_oneyear.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초"))
6) time 모듈
import time
print("지금부터 5초 동안 정지합니다")
time.sleep(5)
print("종료합니다.")
7) urllib 모듈
from urllib import request
target = request.urlopen("https://google.com")
output = target.read()
print(output)
8) operator 모듈
# 콜백함수 = 매개변수로 사용 되는 함수
books = [{"제목": "A",
"가격": 10000},
{"제목": "B",
"가격": 20000},
{"제목": "C",
"가격": 30000}]
def price(book):
return book["가격"]
print(min(books, key = price))
print(max(books, key = price))
# 람다
print(min(books, key = lambda book: book["가격"]))
print(max(books, key = lambda book: book["가격"]))
# itemgetter()
from operator import itemgetter
print(min(books, key = itemgetter("가격")))
print(max(books, key = itemgetter("가격")))
9) 확인문제 419p
* 1번 문제 (math 모듈의 함수를 제대로 읽어 들이지 못하는 코드를 고르세요)
- import math
- import sin, cos, tan from math (from과 import의 위치가 바뀜)
- import math as m
- from math import *
* 2번 문제 (파이썬 문서 확인을 통해 모듈의 이름을 다섯개 적고 모듈의 기능이 어떤 것이 있는지 확인하기)
0 wave : WAV 파일 형식의 오디오 데이터를 읽고 쓰기 위한 모듈로, 오디오 처리에 관련된 기능을 제공합니다.
1 array : 일정한 데이터 타입을 갖는 숫자 값들의 효율적인 배열(array)을 제공하는 모듈로,
메모리 공간을 절약하면서 배열을 다룰 수 있습니다.
2 enum : 열거형(enum)을 구현하기 위한 클래스를 제공하는 모듈로,
고정된 값들의 집합을 정의하고 이를 사용하는데 도움을 줍니다.
3 io : 스트림(stream)과 관련된 핵심적인 도구들을 제공하는 모듈로,
파일 입출력, 네트워크 통신 등 다양한 데이터 스트림 처리에 사용됩니다.
4 socket : 네트워크 통신을 위한 저수준(low-level) 인터페이스를 제공하는 모듈로, 소켓(socket) 프로그래밍에 사용되며, 네트워크 통신 기능을 구현할 때 필요한 다양한 메소드와 함수를 제공합니다.
* 3번 문제
('폴더라면 또 탐색하기'라는 재귀 구성으로 현재 폴더 내부에 있는 모든 파일을 탐색하도록 코드를 작성해 보세요.)
# 모듈을 읽어 들입니다.
import os
# 현재의 폴더의 파일/폴더를 출력합니다.
output = os.listdir(".")
print("os.listdir():", output)
print()
# 현재의 폴더의 파일/폴더를 구분합니다.
print("# 폴더와 파일 구분하기")
for path in output:
if os.path.isdir(path):
print("폴더:", path)
else:
print("파일:", path)
# 모듈을 읽어 들입니다.
import os
# 폴더를 읽어 들이는 함수
def read_folder(path):
for item in output: # 폴더 내의 파일과 폴더 리스트를 얻어옴
if os.path.isdir(os.path.join(path,item)) : # 폴더인 경우
read_folder(path+"/"+item) # 재귀적으로 폴더 내부를 탐색
else:
print("파일:", item) # 파일을 출력
read_folder(".") # 현재 폴더를 시작으로 폴더 내부를 탐색
2. 외부 모듈
422~436p 참조
*6장, 7장 코랩 링크
* 핵심
0) try,except 구문 사용법
1) raise 구문 사용법
2) 모듈 사용법
'배운 책들 정리 > 혼자 공부하는 파이썬' 카테고리의 다른 글
파이썬 머신러닝 판다스 데이터 분석 7 - 머신러닝 데이터 분석 (0) | 2023.05.02 |
---|---|
혼자 공부하는 파이썬 8 - 객체, 클래스, 메소드 // 복습 (0) | 2023.04.20 |
혼자 공부하는 파이썬 5,6 - 함수 고급, 예외 처리 (1) | 2023.04.18 |
혼자 공부하는 파이썬 5 - 함수 만들기, 함수의 활용 (1) | 2023.04.17 |
혼자 공부하는 파이썬 4 - 문자열, 리스트, 딕셔너리와 관련된 기본 함수(while,range,reversed,enumerate,Counter 등등) (0) | 2023.04.14 |