try:
x = int(input('나눌 숫자를 입력하세요: '))
y = 10 / x
print(y)
except ZeroDivisionError:
print('숫자는 0으로 나눌 수 없습니다.')
except ValueError:
print('해당 문자는 숫자로 변활 할 수 없습니다.')
결과값
나눌 숫자를 입력하세요: 0
숫자는 0으로 나눌 수 없습니다.
나눌 숫자를 입력하세요: ad
해당 문자는 숫자로 변활 할 수 없습니다.
나눌 숫자를 입력하세요: 65
0.15384615384615385
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 는 except 바로 다음에 와야 하며 except 를 생략할 수 없음
finally 는 except 와 else 를 생략할 수 있음
try:
x = int(input('나눌 숫자를 입력하세요: '))
y = 10 / x
except ZeroDivisionError:
print('숫자는 0으로 나눌 수 없습니다.')
except ValueError:
print('해당 문자는 숫자로 변활 할 수 없습니다.')
else:
print(y)
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
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
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