Python의 중첩된 try...except 문
try...except
문은 Python에서 예외를 포착하거나 오류가 발생하기 쉬운 일부 코드를 실행하는 데 사용됩니다. 요즘은 모든 프로그래밍 언어에 이 기능이 있지만 Python에서는 이 단어로 표시되며 각각 try...except
키워드로 표시됩니다. try...except
외에도 finally
라는 또 다른 키워드도 함께 사용할 수 있습니다.
for
루프와 마찬가지로 이러한 try
, catch
및 finally
문도 중첩될 수 있으며 이 기사에서는 이에 대해 설명합니다.
Python의 중첩된 try...except
문
위에서 언급했듯이 for
루프를 중첩하는 것과 같은 방식으로 이러한 명령문을 중첩할 수 있습니다. 예제는 다음 코드를 참조하십시오.
a = {"a": 5, "b": 25, "c": 125}
try:
print(a["d"])
except KeyError:
try:
print("a:", a["a"])
except:
print("No value exists for keys 'a' and 'd'")
finally:
print("Nested finally")
finally:
print("Finally")
출력:
a: 5
Nested finally
Finally
보시다시피, 위의 프로그램은 먼저 일부 키-값 쌍으로 사전을 초기화한 다음 d
키의 값에 액세스하려고 시도합니다. 키-값 쌍이 존재하지 않기 때문에 KeyError
예외가 발생하고 except
문에 의해 catch됩니다. 그런 다음 인터프리터는 중첩된 try
블록 아래에서 코드를 실행합니다. a
키에 대한 값이 존재하므로 콘솔에 출력되고 중첩된 finally
문 아래의 코드가 실행됩니다. 마지막으로 외부 finally
문 아래에 있는 코드가 실행됩니다.
이는 try
, catch
및 finally
명령문 아래에 try
, catch
및 finally
명령문을 넣을 수 있음을 의미합니다. 예를 들어 이것을 이해합시다. try
, catch
, finally
문이 포함된 코드를 작성하고 이 모든 명령문에도 try
, catch
및 finally
문이 있습니다.
a = {
"a": 5,
"b": 25,
"c": 125,
"e": 625,
"f": 3125,
}
try:
try:
print("d:", a["d"])
except:
print("a:", a["a"])
finally:
print("First nested finally")
except KeyError:
try:
print("b:", a["b"])
except:
print("No value exists for keys 'b' and 'd'")
finally:
print("Second nested finally")
finally:
try:
print("c:", a["c"])
except:
print("No value exists for key 'c'")
finally:
print("Third nested finally")
출력:
a: 5
First nested finally
c: 125
Third nested finally
보시다시피, 먼저 외부 try
블록이 실행됩니다. d
키에 대한 값이 발견되지 않았기 때문에 중첩된 except
문 아래의 코드가 실행되고 중첩된 finally
가 실행됩니다. 외부 try
블록은 실행 중에 예외가 발생하지 않았으므로 except
블록을 건너뛰고 외부 finally
블록 아래의 코드가 실행됩니다.
우리는 원하는 만큼 더 나아가 n
레벨의 중첩된 try
, catch
, finally
문을 생성할 수도 있습니다. 그러나 중첩된 수준의 수가 증가함에 따라 제어 흐름 또는 실행 흐름이 약간 복잡해지고 관리하기 어려워집니다. try
, catch
및 finally
문을 탐색하는 것이 어려워집니다.