본문 바로가기
개발일지/Python

2022.02.08 파이썬정복 13장 예외 처리

by 다니엘의 개발 이야기 2022. 2. 8.
320x100

미리 말하자면 내 기억으론 12장 부턴 설명이 매우 빈약하고

13장인 예외 처리의 후반부에서는 굳이 이걸 이렇게 했어야 했나?

활용 예시가 적절하지 않은것같은데; 라는 생각이 들게끔하는 욕나오는 책임을 다시한번 밝힌다.

 

# 13. 예외 처리

'''
money = 1$+2$
prant(money)
'''

'''
str = "78점"
score = int(str)
print(score)
print("작업완료")
'''

# 위의 2개 케이스는 에러가 생기는 상황이다.

'''
try:
    실행할 명령
except 예외 as 변수:
    오류 처리문
else:
    예외가 발생하지 않을 때의 처리
'''

'''
str = "89점"
try:
    score = int(str)
    print(score)
except:
    print("예외가 발생했습니다.")
print("작업완료")
'''
'''
while True:
    str = input("점수를 입력하세요: ")
    try:
        score = int(str)
        print("입력한 점수 : ",score)
        break
    except:
        print("점수 형식이 잘못 되었습니다.")

print("작업완료")
'''

'''
# 베낀 코드 첫번째
while True:
    str = input("점수를 입력하세요")
    try:
        score=int(str)
        print("입력한 점수:",score)
        break

    except:
        print("점수 형식이 잘못 되었습니다.") # 잘못된 값이 입력되었을때 다시 try로 간다.
print("작업완료")
'''

'''
# 배낀 코드 2번째 작성
while True:
    str = input("점수입력해봐: ")
    try:
        score =int(str)
        print("입력한 함수",score)
        break
    except:
        print("잘못된 값입니다.")
'''

'''
# 안보고 시도해본 코드 - 성공
while True:
    num = input("점수입력해봐: ")
    try:
        score =int(num)
        print("점수는",score)
        break
    except:
        print("틀렸음 다시 입력해봐")
'''

'''
str="89"
try:
    score =int(str)
    print(score)
    a = str[5] # 이부분이 특히 흥미롭다. 안에 2자리 수밖에 없는데 5자리 숫자면 에러나지 않나?
except ValueError:
    print("점수의 형식이 잘못되었스비다.")
except IndexError:
    print("첨자 범위를 벗어났습니다.")
print("작업완료")
# 이거는 try와 except ValueError가 같이 실행된것같은데;
'''

'''
str = "89점"
try:
    score = int(str)
    print(score)
    a = str[5]
except ValueError as e:
    print(e)
except IndexError as e:
    print(e)
'''

'''
str = "90점"
try:
    score = int(str)
    print(score)
    a = str[5] # 이거는 개뜬금없이 왜 설정해놨는지도 의미를 모르겠다.
except ValueError as e:
    print(e)
except IndexError as e:
    print(e)
    
# 이것에 대한 결과값이 invalid literal for int() with base 10: '90점' 가 나오는데 솔직히 모르겠다 왜 이런 결과가 나오는지
# 설명에서는 ValueError와 IndexError가 동일한 라인에 같이 사용될 수 있다고 했다.
# 그러나 역시나 기대를 저버리지 않고 안된다.
# 뭐 이거 보면 열폭하겠지 이건 저래서 다르고 저래서 다르다고
# 아니 그러면 그걸 책으로 설명해주던가 저자 당신 머릿속에만 알고있지 말고
'''

'''
# raise 명령
# raise 명령은 고의적으로 예외를 발생 시킨다.

def calcsum(n):
    if n<0:
        raise ValueError
    sum = 0
    for i in range(n+1):
        sum +=i
    return sum

try:
    print("~10 = ",calcsum(10))
    print("~~5 = ", calcsum(-5))
except ValueError:
    print("입력값이 잘못되었습니다.")

# 다행히 이건 설명이 그지같아도 본래 알고있던 개념의 집합이기 때문에 이해가 모두 된다.
'''

'''
# 배껴서 시도한 코드 첫번째
def cal(n):
    if n<0:
        raise ValueError
    sum = 0
    for i in range(n+1):
        sum+=i
    return sum

try:
    print("10까지 숫자",cal(10))
    print("-5까지의 숫자",cal(-5))

except ValueError:
    print("입력값이 잘못 되었습니다.")
    
'''

'''
# 직접 시도해본 코드 첫번째 - 성공

def cal(n):
    if n<0:
        raise ValueError
    sum=0
    for i in range(n+1):
        sum+=i
    return sum

try:
    print("10까지의 숫자의 합: ",cal(10))
    print("-5까지의 숫자의 합: ",cal(-5))
except:
    print("값이 오류입니다.")
'''

'''
# 해설코드
def calcsum(n):
    if n<0:
        return -1
    sum=0
    for i in range(n+1):
        sum +=i
    return sum

result = calcsum(10)
if result == -1:
    print("입력값이 잘못 되었습니다.")
else:
    print("10까지 =",result)

result = calcsum(-5)
if result == -1:
    print("입력값이 잘못되었습니다.")
else:
    print("10까지 = "result)
'''

'''
# 카피코드

def cal(n):
    if n<0:
        return -1 # 이게 무슨 의미가 있나?
    sum = 0
    for i in range(n+1):
        sum += i
    return sum

result = cal(10)
if result ==-1:
    print("입력값이 잘못 되었습니다.")
else:
    print("10까지",result)

result = cal(-5)
if result == -1:
    print("입력값이 잘못되었습니다.")
else:
    print("10=",result)
'''

'''
# 의미를 모르겠다.
# 전체적으로 사전에 girl이 없으니깐 처음엔 없다고 출력되는건데
# 두번째꺼는 추가후 출력도 아니고
# 뭔 짓을 하는지 별로 알고싶지도 않고 이상하다.

dic = {"boy":"소년","school":"학교","book":"책"}
try:
    print(dic["girl"])
except:
    print("찾는 단어가 없습니다.")

han = dic.get("girl")
if han==None:
    print("찾는 단어가 없습니다.")
else:
    print(han)
'''

# 자원정리
# finally

try:
    print("네트워크 접속")
    # a =2 /0 # 0으로 2는 왜나눠; 그리고 이건 왜있는거야 졸라 이해안가네 무쓸모한것같은데 수식의 배열상
    print("네트워크 통신수행")
finally:
    print("접속 해제")

print("작업완료")

# 진짜로 이책 짜증난다
# 뭐 ㅅㅂ 되지도 않는걸 된다고 검수한하나?
# 아 씌벌 진짜 욕나오네

# 중간에 a = 2/0를 지우라고 해서 지웠더니 오류는 없다. 근데 어차피 프린트 4번되는거면 굳이 try, finally를 쓸 필요가 있나?
# 생각을 하면서 만들걸까? 아니면 만들다보니깐 중간부터 지쳐서 그냥 튀어나오는대로 만든걸까 싶다.

# 하... 진짜
300x250