나는이 (파이썬 3 코드)과 같은 코드를 보았다 :Python ftplib : 올바르게 연결 객체를 해제 하시겠습니까?
import ftplib
from contextlib import closing
with closing(ftplib.FTP()) as ftp:
이 필요한 closing
방법의 사용인가? 흥미로운 answer에서 우리는 컨텍스트 매니저의 __exit__
메쏘드가 데이타베이스 연결 객체에서 (최소한 SQLite는 아니지만) 연결을 닫지 않지만 대신 트랜잭션을 커밋한다는 것을 읽을 수 있습니다. 따라서 closing
메서드를 사용해야합니다.
파이썬의 FTP 클래스는 어떻게 사용됩니까? 파이썬 FTPLIB의 sources 보면
, 우리는이를 찾을 수 있습니다
quit
방법은 우리가 파이썬 3의
closing
방법을 사용할 필요가 없다는 생각 때문에라고
# Context management protocol: try to quit() if active
def __exit__(self, *args):
if self.sock is not None:
try:
self.quit()
except (OSError, EOFError):
pass
finally:
if self.sock is not None:
self.close()
그래서 우리 바로 사용할 수 있습니다 파이썬이 누락되어
with (ftplib.FTP()) as ftp:
방법 __exit__
때문에, closing
파이썬이 코드가 필요합니다.
이 정보가 맞습니까?
당신은 자신의 질문에 대답했습니다 :) Python2에서 말한 것처럼. '__enter__' 함수 나'__exit__' 함수가 없기 때문에 컨텍스트 핸들은 당신의 경우에'ftp' 변수를 할당하는 것 외에는 아무것도하지 않습니다. 따라서 이것은 상속이며 하위 호환성을 유지하는 것입니다. 거꾸로 닌자되는 것에 관심이 없다면 건너 뛸 수 있습니다. – Torxed
@Torxed 인터넷에 잘못된 코드 예제가 흩어져 있기 때문에 (많은 한 번에 작은 스크립트에서 그런 세부 사항을 신경 쓸 필요가 없음을 알고 있습니다.) 쉽게 혼란 스럽기 때문에 확인을 원했습니다. –
질문하는 것이 완전히 좋은 질문입니다. 사람들이이 문제를 우연히 발견하는 경우 좀 더 긴 대답을 썼습니다. – Torxed