with문은 콘텍스트 관리자 객체의 제어를 받아서 임시로 콘텍스트를 생성하고 신뢰성 있게 해제한다.
with문은 에러를 예방하고 반복되는 코드를 줄여주며, API를 안전하고 편리하게 사용할 수 있게 만들고, 파일을 자동으로 닫아주는 기능 이상을 with 블록이 제공하고 있다.
else절은 if문뿐만 아니라 for,while,try문에서도 사용할 수 있다.
for
for루프가 완전히 실행된 후에 break 문으로 중간에 멈추지 않고 else 블록이 실행된다.
while
조건식이 거짓이 되어 while 루프를 빠져나온 후에 break 문으로 중간에 멈추지 않고 else 블록이 실행된다.
try
try블록에서 예외가 발생하지 않을 때만 else블록이 실행되고, else 블록에서 발생한 예외는 else블록 앞에 나오는 except 블록에서 처리되지 않는다.
예외, return, break, continue문이 복합문의 주요 블록을 빠져나오게 만들면 else블록이 실행되지 않는다.
일반적
for item in my_list:
if item.flavor == 'banana':
break
else:
raise ValueError('No banana floavor found!')
try/except블록
try:
dangerous_call()
except OSError:
log('OSError...')
else:
after_call()