In [15]:
def divide(a,b):
try:
return a/b
except ZeroDivisionError:
return None
In [16]:
print(divide(1,2))
In [17]:
print(divide(0,2))
In [18]:
print(divide(1,0))
In [22]:
result = divide(0,1)
if result is None:
print("Invalid inputs")
In [23]:
print(divide(0,0))
In [21]:
result = divide(0,5)
if not result:
print("Invalid inputs")
In [24]:
#None를 리턴하는것이 아니라 예외를 날린다.
def divide2(a,b):
try:
return a/b
except ZeroDivisionError as e:
raise ValueError("Invalid inputs") from e
In [26]:
print(divide2(0,1))
In [28]:
x,y = 5,2
try:
result = divide2(x,y)
except ValueError:
print("잘못된 연산입니다.")
else:
print("Result is %.1f" % result)
In [33]:
def sort_priority(values, group):
def helper(x):
if x in group:
return (0,x)
return (1,x)
values.sort(key = helper)
In [34]:
numbers = [8, 3, 1, 2, 5, 4, 7, 6]
In [35]:
group = {2, 3, 5, 7}
In [36]:
sort_priority(numbers, group)
print(numbers)
In [37]:
print((1,2) < (0,1))
In [38]:
print((1,2) < (3,4))
In [39]:
print((1,2) < (1,0))
In [40]:
print((1,2) < (1,3))
In [43]:
"""
표현식에서 변수를 참조할 떄 파이썬 인터프리터는 참조를 해결하려고 다음과 같은 순서로 스코프를 탐색한다.
1. 현재 함수의 스코프
2. (현재 스코프를 담고 있는 다른 함수 같은) 감싸고 있는 스코프
3. 코드를 포함하고 있는 모듈의 스코프(전역 스코프라고도 함)
4. (len이나 str갘은 함수를 담고 있는) 내장 스코프
nonlocal문은 특정 변수 이름에 할당할때 스코프 탐색이 일어나야 함을 나타낸다. 모듈수준 스코프까지는 탐색할 수 없다.
"""
def sort_priority2(numbers, group):
found = False
def helper(x):
nonlocal found
if x in group:
found = True
return (0,x)
return (1,x)
numbers.sort(key = helper)
return found
In [44]:
found = sort_priority2(numbers, group)
print("Found:", found)
print(numbers)
In [45]:
class Sorter(object):
def __init__(self, group):
self.group = group
self.found = False
def __call__(self, x):
if x in self.group:
self.found = True
return (0, x)
return (1, x)
In [50]:
sorter = Sorter(group)
numbers.sort(key = sorter)
assert sorter.found is True
In [ ]: