구조별 Python: Try/Except/Else로 정확한 오류 범위 지정
Source: Dev.to

“버그가 너무 골치아파, 마가렛,” 팀오티가 좌절하며 말했다. “데이터를 가져올 때
ConnectionError를 잡으려고 하는데, 왜 내except블록이process()함수에서 발생한 오류까지 잡아버리는 거야! 나는 네트워크 호출만 보호하고 싶었는데.”
마가렛은 그의 코드를 바라보았다. “그건 네트워크 호출과 처리 로직을 같은 블록에 넣어버려서, 의도보다 더 넓은 범위에서 오류를 처리하고 있기 때문이야.”
The Problem: Oversized Error Scope
Timothy’s Code
try:
data = fetch_data()
process(data)
except ConnectionError:
print("Failed: Connection Error")
Python Structure Viewer output
=== TREE VIEW ===
Try
data = fetch_data()
process(data)
Except ConnectionError
print('Failed: Connection Error')
=== ENGLISH VIEW ===
Try:
Set data to fetch_data().
Evaluate process(data).
Except ConnectionError:
Evaluate print('Failed: Connection Error').
“
Try블록을 봐,” 마가렛이 말했다. “fetch_data()와process(data)가 모두 그 안에 중첩돼 있어.process()가 전혀 다른 이유—예를 들어 수학 오류나 키 누락—로 실패하더라도 파이썬은 여전히ConnectionError핸들러를 실행할 거야. 위험한 작업과 그 이후 로직 사이의 경계가 흐려진 거지.”
The Solution: The else Block
“파이썬에는 이를 위한 구체적인 구조적 앵커가 있어,” 마가렛이 말했다. “그것은
else블록이야.try블록이 예외를 일으키지 않고 성공적으로 끝났을 때만 실행돼.”
Rewritten Python Snippet
try:
data = fetch_data()
except ConnectionError:
print("Failed: Connection Error")
else:
process(data)
Python Structure Viewer output
=== TREE VIEW ===
Try
data = fetch_data()
Except ConnectionError
print('Failed: Connection Error')
Else
process(data)
=== ENGLISH VIEW ===
Try:
Set data to fetch_data().
Except ConnectionError:
Evaluate print('Failed: Connection Error').
Else:
Evaluate process(data).
팀오티는 새로운 트리 뷰를 바라보며 말했다. “
Else가Except와 같은 수준에 있어. 두 개가 평행한 가지야.”
“맞아,” 마가렛이 대답했다. “구조적으로 네트워크 호출을 격리했어.
Except가지는 실패를,Else가지는 성공을 처리하지.”
Isolating the Logic
“
process(data)를else블록으로 옮김으로써,” 마가렛이 이어 말했다, “오류 처리를 정밀하게 할 수 있어. 이제process(data)가 실패하면 연결 오류 핸들러에 잡히지 않을 거야. 오류는 정상적으로 전파돼서 처리 로직에 실제 버그가 있음을 알려줄 거야, 네트워크 오류로 오인되지 않게.”
팀오티가 고개를 끄덕였다. “첫 번째 버전에서는 위험 구역 안에서 처리를 했었지. 두 번째 버전에서는 위험한 부분이 끝난 뒤에만 처리를 시작해.”
“그게 바로
else절의 힘이야,” 마가렛이 결론을 내렸다. “try블록을 특정 예외를 일으킬 수 있는 코드에만 집중하게 해 주는 거야. 특정 위험 작업이 성공했을 때만 추가 작업을 수행하고 싶을 때마다 사용해야 할 패턴이야.”
Analyze Python Structure Yourself
Download the Python Structure Viewer — a free tool that shows code structure in tree and plain English views. Works offline, no installation required.