
본 블로그 글은 박동민·강영민 저자님의 으뜸파이썬 교재를 참고하여 만들어진 글임을 밝힙니다.
예외 처리 구문
try:
[예외가 발생할 가능성이 있는 코드]
except [예외 유형]:
[예외 발생 시 실행할 코드]
else:
[예외가 발생하지 않았을 때 실행할 코드] # 선택적
finally:
[예외 발생 여부와 관계없이 항상 실행할 코드] # 선택적
잘못된 입력에 관한 예외 처리
try :
a, b = map(int, input('두 수를 입력하세요 : ').split())
result = a / b
print(f'{a} / {b} = {result}')
except:
print('정확한 수를 입력하세요')
ValueError 와 ZeroDivisionError 등의 오류를 처리한다.ValueError : 숫자가 아닌 값을 입력했을 때 발생ZeroDivisionError : 0으로 나누려고 할 때 발생예외 처리 및 예러 종류 출력하기
try :
a, b = map(int, input('두 수를 입력하세요 : ').split())
result = a / b
print(f'{a} / {b} = {result}')
except Exception as e:
print('error :', e)
print('정확한 수를 입력하세요')
예외마다 서로 다른 에외 처리
try:
a, b = map(int, input('두 수를 입력하세요 : ').split())
result = a / b
print(f'{a} / {b} = {result}')
except ValueError: # 숫자가 아닌 값을 입력했을 때 처리
print("error: 숫자를 입력하세요.")
except ZeroDivisionError: # 0으로 나누려고 할 때 처리
print("error: 0으로 나눌 수 없습니다.")
except Exception as e: # 그 외 모든 예외 처리
print("error:", e)
print("예기치 못한 오류가 발생했습니다.")
try-except-else 구문
try:
a, b = map(int, input('두 수를 입력하세요 : ').split())
result = a / b
except ValueError: # 숫자가 아닌 값을 입력했을 때 처리
print("error: 숫자를 입력하세요.")
except ZeroDivisionError: # 0으로 나누려고 할 때 처리
print("error: 0으로 나눌 수 없습니다.")
except Exception as e: # 그 외 모든 예외 처리
print("error:", e)
print("예기치 못한 오류가 발생했습니다.")
else: # 예외가 발생하지 않았을 때 실행
print(f'{a} / {b} = {result}')
print("계산이 성공적으로 완료되었습니다!")
try-except-else-finally 구문
try:
a, b = map(int, input('두 수를 입력하세요 : ').split())
result = a / b
except ValueError: # 숫자가 아닌 값을 입력했을 때 처리
print("error: 숫자를 입력하세요.")
except ZeroDivisionError: # 0으로 나누려고 할 때 처리
print("error: 0으로 나눌 수 없습니다.")
except Exception as e: # 그 외 모든 예외 처리
print("error:", e)
print("예기치 못한 오류가 발생했습니다.")
else: # 예외가 발생하지 않았을 때 실행
print(f'{a} / {b} = {result}')
print("계산이 성공적으로 완료되었습니다!")
finally: # 예외 발생 여부와 관계없이 항상 실행
print("프로그램을 종료합니다.")
예시
class MyCustomError(Exception): # Exception 클래스 상속
def __init__(self, message):
self.message = message
try:
raise MyCustomError("이것은 사용자 정의 예외입니다!") # 예외 발생
except MyCustomError as e:
print(f"Custom Exception Caught: {e.message}")
| 모드 | 설명 |
|---|---|
r | 읽기 모드. 파일이 존재해야 하며, 읽기 전용으로 엶 |
w | 쓰기 모드. 파일이 없으면 생성, 기존 파일은 내용 삭제 |
a | 추가 모드. 파일이 없으면 생성, 기존 내용 뒤에 추가 |
r+ | 읽기 및 쓰기 모드. 파일이 존재해야 함 |
w+ | 읽기 및 쓰기 모드. 파일이 없으면 생성, 기존 내용 삭제 |
a+ | 읽기 및 추가 모드. 파일이 없으면 생성 |
💡 바이너리 파일이란?
- 데이터를 이진 데이터(0과 1)로 저장하며, 사람이 읽을 수 없는 형식을 말한다.
- 이미지, 오디오, 동영상, 실행 파일 등 멀티미디어 데이터를 저장할 때 사용한다.
- 바이너리 모드로 파일 처리시에는
b와 함께 사용한다.
rb: 바이너리 읽기 모드wb: 바이너리 쓰기 모드ab: 바이너리 추가 모드
파일 쓰기
f = open('hello.txt', 'w') # 파일을 쓰기 모드로 열기
f.write('Hello World!')
f.close()
open 의 경우 encoding 인자와 함께 인코딩 형식 지정이 가능하다.utf-8 : 유니코드 표준 인코딩 (가장 널리 사용됨)ascii : 기본 ASCII 문자 집합 (영문 알파벳 및 기호)latin-1 : ISO-8859-1, 유럽 언어 지원cp949 : 한국어 윈도우 기본 인코딩 (EUC-KR 기반)euc-kr : 한국어 EUC-KR 인코딩utf-16 : 2바이트 유니코드utf-32 : 4바이트 유니코드파일 읽기
f.read()
f = open('hello.txt', 'r') # 파일을 읽기 모드로 열기
s = f.read()
print(s)
f.close()
f = open('hello.txt', 'r') # 파일을 읽기 모드로 열기
s = f.read(5) # 5개의 문자 읽기
print(s)
f.close()
f.readline()
f = open('foo.txt', 'r')
s = f.readline().rstrip()
print(s)
s = f.readline().rstrip()
print(s)
f.close()
파일 추가하기
f = open('foo.txt', 'a+') # 파일 읽기 및 추가하기
f.write(400)
f.close()
__enter__와 __exit__ 메서드를 구현하여, 자원을 열고 닫는 작업을 관리하는 객체__enter__ : 컨텍스트에 들어갈 때 자동으로 실행__exit__ : 컨텍스트에서 나올 때 자동으로 실행일반적인 구문
f = open('hello.txt', 'w')
f.write('Hello World!')
f.close()
try-finally 구문
f = open('hello.txt', 'w')
try:
f.write('Hello World!')
finally:
f.close()
with-as 구문
with open('hello.txt', 'w') as f:
f.write('Hello World!')
# with 블록 종료 후 파일이 자동으로 닫힘