특정 조건이 충족되면 일찍 종료되도록 할 수있는 컨텍스트 관리자를 만들어야합니다.python3 컨텍스트 관리자 강제로 조기 종료
더 상세 :
콘텍스트 관리자가 확인/리소스를 해제/잠금 처리 할 필요가있다. __enter__
에서 컨텍스트 관리자는 리소스가 잠겨 있는지 확인해야합니다. 그렇다면 문맥에서 코드를 실행하지 않고 __exit__
을 호출하고 싶습니다. 그렇지 않은 경우 컨텍스트 관리자는 리소스를 가져 와서 컨텍스트 코드를 실행하고 __exit__
에서 리소스를 정리합니다.
그것은 다음과 같이 보일 수 있습니다
class my_context_manager:
def __enter__(self):
if resource_locked():
self.__exit__(None, ResourceLockedException(), None)
else:
acquire_resource()
def __exit__(self, *exc_info):
if not isinstance(exc_info[1], ResourceLockedException):
release_resource()
else:
log.warn("Resource already in use.")
위의 코드는 실제로는하지만, 작동하지 않는 실행되는 컨텍스트 내에서 코드를 중지하지 않습니다 __enter__
의 내부 __exit__
를 호출하기 때문이다.
또는 __enter__
에서 ResourceLockedException
을 던질 수는 있지만 __exit__
은 호출되지 않습니다. 예외는 컨텍스트 관리자 자체에서 발생하기 때문에 호출되지 않습니다. 나는 예외를 잡을 수 있고, 경고를 기록하고, 자원이 잠겨있는 경우 컨텍스트를 입력 할 수 있기를 원합니다.
이렇게하면 __exit__
이 호출되고 컨텍스트 코드가 실행되지 않도록 일찍 컨텍스트를 닫는 방법을 찾게됩니다. 위의 아이디어 중 하나를 조정할 수있는 방법이 있습니까? 아니면 다른 방법이 있습니까?