>  Q&A  >  본문

python - 为什么这段代码没有异常抛出?

In [8]: def bar():
   ...:     a = 10
   ...:     try:
   ...:         raise
   ...:     except:
   ...:         try:
   ...:             raise
   ...:         except:
   ...:             raise
   ...:     finally:
   ...:         return a


In [9]: bar()
Out[9]: 10
天蓬老师天蓬老师2741일 전458

모든 응답(2)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-18 10:30:05

    매우 흥미롭습니다. 먼저 몇 가지 코드를 실행해 보겠습니다

    1. 이 코드는 try의 레이어 수에 대해 걱정할 필요가 없다는 것을 의미합니다. 실제로는 예외가 발생하지 않는 이유만 알아내면 됩니다.
    으아악
    2. 이 코드는 return 문이 있으면 예외가 발생하지 않는다는 의미입니다.
    으아악
    3. 드디어 파이썬을 이해하기 위해 이 글을 보고 확인했습니다.

    f()가 예외를 던진 후, Except에서 return을 실행하는 것 같지만 호출자에게 반환되지 않고 finally에서 코드 실행을 "지속"합니다. 이 시점에서 나는 마침내 finally의 진정한 의미를 이해하게 되었습니다. 즉, 반환이 이루어지더라도 finally의 코드는 여전히 실행되어야 한다는 것입니다.

    여기서도 try에 종료 메소드가 필요한 명령문이 있으면 finally 실행을 시도한다는 점을 이해할 수 있습니다. finally에 리턴 메소드가 있으면 즉시 리턴하고 이전 종료 명령문은 실행되지 않습니다.
    이때 이 코드 문자열을 살펴볼 수 있습니다

    으아악
    4. 이제 드디어 좀 더 확실해지셨나요~

    지금 배워서 판매하세요. 틀린 부분이 있으면 지적해주세요~

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 10:30:05

    마지막에 예외가 발생하면 Except 문이 헛된 것이 아닌가?

    회신하다
    0
  • 취소회신하다