Python( 예외 , 이터레이터 )

짬그브·2025년 4월 9일

예외

예외 예제


try:
    x = int(input('나눌 숫자를 입력하세요: '))
    y = 10 / x
    print(y)

except ZeroDivisionError:
    print('숫자는 0으로 나눌 수 없습니다.')

except ValueError:
    print('해당 문자는 숫자로 변활 할 수 없습니다.')

결과값

나눌 숫자를 입력하세요: 0
숫자는 0으로 나눌 수 없습니다.
나눌 숫자를 입력하세요: ad
해당 문자는 숫자로 변활 할 수 없습니다.
나눌 숫자를 입력하세요: 65
0.15384615384615385

예외 예제 2

y = [10, 20, 30]

try:
    index, x = map(int, input('인덱스와 나눌 숫자를 입력하세요: ').split())
    print(y[index] / x)
except ZeroDivisionError:
    print('숫자를 0으로 나눌 수 없습니다.')
except IndexError:
    print('잘못된 인덱스입니다.')

결과값

인덱스와 나눌 숫자를 입력하세요: 2 1
30.0

내장 예외 사이트

https://docs.python.org/ko/3.9/library/exceptions.html

else 와 finally 사용하기

다음과 같이 else 는 except 바로 다음에 와야 하며 except 를 생략할 수 없음

finally 는 except 와 else 를 생략할 수 있음

예외 예제 3


try:
    x = int(input('나눌 숫자를 입력하세요: '))
    y = 10 / x

except ZeroDivisionError:
    print('숫자는 0으로 나눌 수 없습니다.')

except ValueError:
    print('해당 문자는 숫자로 변활 할 수 없습니다.')

else:
    print(y)

예외 예제 4

def three_multiple():
    ldata = int(input('3의 배수를 입력하세요 :'))
    if ldata % 3 != 0:
        raise Exception('입력하신 값은 3의 배수가 아닙니다.')
    
    print('입력받은 데이터 : ', ldata)

try:
    three_multiple()
except Exception as e:
    print('예외발생')
    print('예외 상세 내용: ',e)

결과값

3의 배수를 입력하세요 :5
예외발생
예외 상세 내용:  입력하신 값은 3의 배수가 아닙니다.
3의 배수를 입력하세요 :3
입력받은 데이터 :  3

예외 예제 5

class NotThreeMultipleError(Exception):
    def __init__(self):
        super().__init__('3의 배수가 아님!!!!!!!!!!!!')


def three_multiple():
    try:
        x = int(input('3의 배수를 입력하세요:'))
        if x % 3 != 0:
            raise NotThreeMultipleError
        print('입력 값:', x)
    except NotThreeMultipleError as e:
        print('예외 발생 : ', e)

three_multiple()

결과값

3의 배수를 입력하세요:20
예외 발생 :  3의 배수가 아님!!!!!!!!!!!!
3의 배수를 입력하세요:21
입력 값: 21

이터레이터

이터레이터(iterator)는 값을 차례대로 꺼낼 수 있는 객체(object)임

파이썬에서는 이터레이터만 생성하고 값이 필요한 시점이 되었을 때 값을 만드는 방식을 사용함

데이터 생성을 뒤로 미루는 것인데 이런 방식을 지연 평가(lazy evaluation)라고 함

이터레이터는 반복자라고 부르기도 함

반복 가능한 객체 알아보기

리스트의 이터레이터를 변수에 저장한 뒤 next 메서드를 호출해보면 요소를 차례대로 꺼낼 수 잇음

이터레이터는 next 로 요소를 계속 꺼내다가 꺼낼 요소가 없으면 Stoplteration 예외를 발생시켜서 반복을 끝냄

리스트뿐만 아니라 문자열, 딕셔너리, 세트도 iter 를 호출하면 이터레이터가 나옴

이터레이터에서 next 를 호출하면 차례대로 값을 꺼냄

이터레이터 예제

it2 = [10,20,30,40].__iter__()
print(it2)
print(it2.__next__())
print(it2.__next__())
print(it2.__next__())
print(it2.__next__())
print(it2.__next__())

결과값

10
20
30
40
Traceback (most recent call last):
  File "C:\Users\hi\Desktop\Python_lec\python_basic_part3\iteratorEx1.py", line 14, in <module>
    print(it2.__next__())
StopIteration

이터레이터 예제2

class CustomRange:
    def __init__(self, stop):
        self.current = 0
        self.stop = stop

    def __iter__(self):
        return self
    
    def __next__(self):
        if self.current < self.stop:
            rvalue = self.current
            self.current += 1
            return rvalue
        else:
            raise StopIteration
        
for i in CustomRange(5):
    print(i)

결과값

0
1
2
3
4
profile
+AI to AI+

0개의 댓글