python2.4에서 멈추었으므로 finally 절을 생성자 또는 yield
과 함께 사용할 수 없습니다. 이 문제를 해결할 수있는 방법이 있습니까?finally 절이있는 try 블록에서 파이썬 2.4의 yield가 허용되지 않습니다.
파이썬 2.4에서이 제한을 해결하는 방법에 대한 언급을 찾을 수 없으며 (주로 __del__
을 포함하여 해결 방법에 대한 큰 팬이 아니며 합리적인 시간)은별로 매력적이지 않습니다.
python2.4에서 멈추었으므로 finally 절을 생성자 또는 yield
과 함께 사용할 수 없습니다. 이 문제를 해결할 수있는 방법이 있습니까?finally 절이있는 try 블록에서 파이썬 2.4의 yield가 허용되지 않습니다.
파이썬 2.4에서이 제한을 해결하는 방법에 대한 언급을 찾을 수 없으며 (주로 __del__
을 포함하여 해결 방법에 대한 큰 팬이 아니며 합리적인 시간)은별로 매력적이지 않습니다.
당신은 finally 블록 피하기 위해 코드를 복제 할 수 있습니다 :
try:
yield 42
finally:
do_something()
가되다 :
try:
yield 42
except: # bare except, catches *anything*
do_something()
raise # re-raise same exception
do_something()
(파이썬 2.4에서이 시도하지했습니다를, 당신은 sys.exc_info보고 할 수 있습니다 raise sys.exc_info[0], sys.exc_info[1], sys.exc_info[2]
과 같이 위의 re-raise 문 대신.
생성자 인스턴스가 단순히 폐기 될 때 보장되는 유일한 코드입니다 (garbage co llected)는 해당 로컬 변수에 대한 __del__
메소드 (외부에 해당 객체에 대한 참조가없는 경우) 및 해당 로컬 변수에 대한 약한 참조에 대한 콜백입니다. 약한 참조 경로는 비 침습적이므로 (__del__
이라는 특수 클래스는 필요하지 않습니다. 약한 참조 가능). 예 :
import weakref
def gen():
x = set()
def finis(*_):
print 'finis!'
y = weakref.ref(x, finis)
for i in range(99):
yield i
for i in gen():
if i>5: break
원하는 경우 finis!
을 인쇄합니다.