예외처리
에러: 심각한 오류
예외: 덜 심각한 오류
try :
오류가 발생할 수 있는 문장
except 오류 이름 as 객체: //alias : 별칭
오류 발생 시 실행할 문장
모든 예외 클래스의 부모 클래스는 Exception이다
어떤 오류든지 상관없이 except로 처리할 때에는
"오류이름" 자리에 예외의 최상위 부모인 Exception을 작성한다
lst=[1,2,3]
print(lst[3])
Traceback (most recent call last):
File "c:\python_jsy\workspace\day0721\exTest.py", line 2, in <module>
print(lst[3])
IndexError: list index out of range
def main():
print("안녕하세요")
age = int(input("나이 입력: "))
print("입력하신 나이는 다음과 같습니다.", age)
print("만나서 반가웠습니다")
main()
#스물이라고 입력해보기
Traceback (most recent call last):
File "c:\python_jsy\workspace\day0721\exTest.py", line 7, in <module>
main()
File "c:\python_jsy\workspace\day0721\exTest.py", line 3, in main
age = int(input("나이 입력: "))
ValueError: invalid literal for int() with base 10: '스물'
def main():
print("안녕하세요")
while True:
try:
age=int(input("나이를 입력하세요: "))
print("입력하신 나이는 다음과 같습니다.", age)
break
except ValueError:
print("입력이 잘못 되었습니다.")
print("만나서 반가웠습니다")
main()
안녕하세요
나이를 입력하세요: 스물
입력이 잘못 되었습니다.
만나서 반가웠습니다
나이를 입력하세요: 20
입력하신 나이는 다음과 같습니다. 20
# exception test
try:
int(input("정수 입력: "))
except Exception as e:
print("정수만 입력하세요")
print("반드시 실행되어야 할 문장")
정수 입력: rkskek
정수만 입력하세요
반드시 실행되어야 할 문장
try:
print(10/0)
except ZeroDivisionError as e:
# print(e.__str__)
print("0으로 나눌 수 없습니다")
0으로 나눌 수 없습니다
실행중에 발생할 수 있는 에러는 예외처리로 잡을 수 있다
사용자 예외 처리
class NickNameError(Exception):
pass
def checkNickName(name):
if name == "바보":
raise NickNameError
nickname = input("닉네임: ")
try:
checkNickName(nickname)
print("닉네임 생성 성공!")
except NickNameError:
print("비속어는 사용할 수 없습니다.")
닉네임: 안녕
닉네임 생성 성공!
채팅 프로그램
# 외부에서 채팅 문자열을 받아와서 in으로 비속어 검사를 한다
# 비속어는 바보, 멍청이, 똥개
# 사용자 예외처리로 선언하여 만든다. 비속어가 없다면 채팅 메세지를 출력
class BadWordError(Exception):
pass
chat=""
def checkChatting(temp):
badWords =["바보","멍청","똥개"]
for i in badWords:
if i in temp:
global chat
chat = temp.replace(i, "**")
raise BadWordError()
cnt=0
while True:
chat = input("채팅[나가기:q] : ")
if chat.lower() == 'q':
break
try:
checkChatting(chat)
except BadWordError:
cnt += 1
print("%d회 비속어를 사용하셨습니다." %cnt)
print(chat)
채팅[나가기:q] : 안녕
채팅[나가기:q] : 바보야
1회 비속어를 사용하셨습니다.
**야
파일 입출력
파일 객체 = open("경로","목적")
목적
-w : 해당 경로 내용 덮어쓰기(기존 내용 삭제, 해당경로에 파일이 없으면 생성)
-a : 해당 경로 내용 추가하기(기존 내용 유지, 해당경로에 파일이 없으면 생성)
-r : 해당 경로 내용 읽어오기(해당 경로에 파일이 없으면 오류)
출력하기
파일 객체.write("문자열")
입력하기
파일 객체.readlines()
close() : 버퍼를 비워주어야 파일에 적용된다 반드시 작업이 끝나면 파일 객체명.close() 를 사용하자
#절대 경로 : 내 위치가 어디든 찾아갈 수 있는 경로
#상대 경로 : 내 위치에 따라 경로가 변경 된다
# . : 현재위치
# .. : 이전 폴더
name_file = open("names.txt",'w')
name_file.write("장소영")
name_file.close()
해당 파일에 있는 내용 가져오기
#해당 파일에 있는 내용 가져오기
name_file = open("names.txt",'r')
for i in name_file.readlines():
print(i, end="")
장소영
'Dev. > Python' 카테고리의 다른 글
python :: 얕은 복사(shallow copy) (0) | 2022.08.02 |
---|---|
Python :: mutable / immutable (0) | 2022.07.26 |
Python :: 생성자 (초기화 메소드) (0) | 2022.07.19 |
Python :: 클래스와 객체 (0) | 2022.07.19 |
python :: 객체 지향 프로그래밍 (0) | 2022.07.14 |
댓글