Small Grey Outline Pointer Python :: 예외처리 / 사용자 예외 처리, 파일 입출력
본문 바로가기
Dev./Python

Python :: 예외처리 / 사용자 예외 처리, 파일 입출력

by sso. 2022. 7. 20.

예외처리

에러: 심각한 오류
예외: 덜 심각한 오류

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="")

장소영

728x90

'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

댓글