[PYTHON] Python try finally 블록 반환 [duplicate]
PYTHONPython try finally 블록 반환 [duplicate]
아래에 흥미로운 코드가 있습니다.
def func1():
try:
return 1
finally:
return 2
def func2():
try:
raise ValueError()
except:
return 1
finally:
return 3
func1()
func2()
누군가 두 가지 기능을 반환하고 WHY를 설명 할 수있는 설명을 해주십시오. 즉 실행 순서를 설명합니다.
해결법
-
==============================
1.파이썬 문서에서
파이썬 문서에서
따라서 try / except 블록은 return을 사용하여 반환 값을 설정하면 반환 값을 지정합니다. finally 블록은 항상 실행되며 다른 반환을 사용하는 동안 리소스 등을 비우는 데 사용해야합니다. 원래의 블록을 덮어 씁니다.
특별한 경우 func1 ()은 2를 반환하고 func2 ()는 3을 반환합니다. 이는 finally 블록에 반환되는 값이기 때문입니다.
-
==============================
2.항상 finally 블록으로 이동하므로 try en을 제외하고는 return을 무시합니다. try와 except보다 높은 수익을 얻으려면 그 값을 반환합니다.
항상 finally 블록으로 이동하므로 try en을 제외하고는 return을 무시합니다. try와 except보다 높은 수익을 얻으려면 그 값을 반환합니다.
def func1(): try: return 1 # ignoring the return finally: return 2 # returns this return def func2(): try: raise ValueError() except: # is going to this exception block, but ignores the return because it needs to go to the finally return 1 finally: return 3 def func3(): return 0 # finds a return here, before the try except and finally block, so it will use this return try: raise ValueError() except: return 1 finally: return 3 func1() # returns 2 func2() # returns 3 func3() # returns 0
-
==============================
3.미리 진술서를 인쇄하면 실제로 도움이됩니다.
미리 진술서를 인쇄하면 실제로 도움이됩니다.
def func1(): try: print 'try statement in func1. after this return 1' return 1 finally: print 'after the try statement in func1, return 2' return 2 def func2(): try: print 'raise a value error' raise ValueError() except: print 'an error has been raised! return 1!' return 1 finally: print 'okay after all that let\'s return 3' return 3 print func1() print func2()
이것은 다음을 반환합니다.
try statement in func1. after this return 1 after the try statement in func1, return 2 2 raise a value error an error has been raised! return 1! okay after all that let's return 3 3
파이썬은 항상 "도달 한"코드가 두 함수에서 모두 1을 반환하는지에 관계없이 반환되는 마지막 것을 반환한다는 것을 알 수 있습니다.
finally 블록은 항상 실행되므로 함수에서 마지막으로 반환되는 것은 finally 블록에서 반환되는 것이 전부입니다. func1에서는 2입니다. func2에서는 3입니다.
-
==============================
4.func1 ()은 2를 반환합니다. func2 ()는 3을 반환합니다.
func1 ()은 2를 반환합니다. func2 ()는 3을 반환합니다.
마지막으로 블록은 관계없이 또는 예외적으로 실행됩니다.
디버거를 사용하여 실행 순서를 볼 수 있습니다. 예를 들어 화면 캐스트를 참조하십시오.
from https://stackoverflow.com/questions/19805654/python-try-finally-block-returns by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python MySQLdb : connection.close () VS. cursor.close () (0) | 2018.10.25 |
---|---|
[PYTHON] Python Selenium에서 속성으로 요소를 찾는 방법이 있습니까? (0) | 2018.10.25 |
[PYTHON] 파이썬에서 클래스 foo와 클래스 foo (객체)의 차이점 (0) | 2018.10.25 |
[PYTHON] 파이썬 : 함수에 대한 정보를 얻는 방법? (0) | 2018.10.25 |
[PYTHON] 목록에있는 값의 일부보다 큰 목록의 목록을 반환합니다. (0) | 2018.10.25 |