20,000 개의 파일을 다운로드하려고하는 Python/Mechanize로 작성된 대규모 일괄 다운로드 응용 프로그램이 있습니다. 확실히 어떤 큰 다운로더라도 가끔 ECONNRESET
오류가 발생합니다. 지금, 나는 each of these individually을 처리하는 방법을 알고 있지만, 두 가지 문제가 그와 함께있다 : 난 정말이 아니라 try/catch 블록에서 모든 단일 아웃 바운드 웹 호출을 포장하지 않는 게 좋을Python/Mechanize의 ECONNRESET에서 복구
- .
이렇게해도 예외가 발생하면 오류를 처리하는 방법을 알고있는 데 문제가 있습니다. 코드가 그럼 그냥
data = browser.response().read()
경우 I 즉, 그것을 처리하는 방법을 정확하게 알고
data = None while (data == None): try: data = browser.response().read() except IOError as e: if e.args[1].args[0].errno != errno.ECONNRESET: raise data = None
하지만 다음
browser.follow_link(link)
단지 임의의 인스턴스가 있다면 어떻게 할
ECONNRESET
이 여기 어딘가에 던져지면 Mechanize의 내부 상태를 알 수 있습니까? 예를 들어 코드를 다시 시도하기 전에browser.back()
으로 전화해야합니까? 어떤 종류의 오류로부터 복구하는 적절한 방법은 무엇입니까?
편집 : 승인 된 답변의 해결책이 확실하게 작동하며, 제 경우에는 구현하기가 어렵다는 것이 밝혀졌습니다. 그러나 나는 여전히 학계에 관심이있다. 오류를 신속하게 잡아낼 수있는 오류 처리 메커니즘이 있는지 여부에있다.
내가 오류 처리기에 대한 더 나은 방법이없는 경우 "핵 옵션"으로 이런 생각을했다. 감사! –
@Charles Pence : 더 똑똑해질 수는 있지만, 각 웹 호출마다 try..except 블록을 배치하고 사례 별 기준으로 각 오류를 처리해야합니다. 프로그래머 만이 주어진 시점에서 실패 할 경우 적절한 조치가 무엇인지 결정할 수 있기 때문입니다. – unutbu
사실, 이것은 생각했던 것보다 구현하기가 쉽다는 것을 증명했습니다. 고마워요! –