예외

2010-08-01 4 views
7
내가 인터넷에서 파일을 다운로드하고

에 실패 파일, 그리고하는 오류를 기록, 그리고 내가 뭐하는 거지에도 불구하고 실패하는 방법 :예외

try: 

except IOError as e: 
    print e; 

경우 : 쿼리 페이지에 대한

오류가 있습니다. 로그에 기록한 후 다음 파일로 계속 진행하려고합니다.

어떤 이유로 든 파일 이름이 잘못되었거나 웹 사이트가 다운 된 경우이 루프에서 이미지를 다운로드하려고하는데 for 루프의 다음 항목으로 계속 진행하려고합니다.

더 일반적인 오류가 발생하지 않고 처리를 계속할 수 있습니까?

또한 어떻게 파일에 오류를 기록 할 수 있습니까?

+0

오류가 발생하면 계속할 수 없습니다. 다운로드가 중단됩니다. 어떤 구체적인 오류가 있습니까? –

+0

나는 이것을 for 루프에 가지고 있는데, 왜 그 오류를 잡아 내지 못하고 다음 파일을 계속 시도 할까? – Blankman

+0

@Blankman : 코드를 제공하지 않았기 때문에 "오류를 잡아서 다음 파일을 계속 시도하고 시도 할 수없는 이유"를 추측하는 것은 불가능합니다. –

답변

6

바와 같이, 로트 지적 : 스크립트를 실행

import logging 
logging.basicConfig(filename='/tmp/myapp.log', level=logging.DEBUG, 
        format='%(asctime)s %(levelname)s %(name)s %(message)s') 
logger=logging.getLogger(__name__) 

try: 
    1/0 
except ZeroDivisionError as err: 
    logger.error(err) 

는 /tmp/myapp.log의 글 문제가 업스트림 (또는 다운로드 주소로 수정 됨) 일 경우 가장 좋은 방법은 다시 시도하는 것입니다. 상황이 당신이 다운로드의 목록을 가지고 있고, 단순히 건너하려는 경우 그러나, 다음, 대신 종료의 다운로드를 실패

logf = open("download.log", "w") 
for download in download_list: 
    try: 
     # code to process download here 
    except Exception as e:  # most generic exception you can catch 
     logf.write("Failed to download {0}: {1}\n".format(str(download), str(e))) 
     # optional: delete local version of failed download 
    finally: 
     # optional clean up code 
     pass 

유의할 것들 :의

(1) 사용을 " logging "모듈은 ~ unutbu가 제안한 것처럼 타임 스탬프, 오류 수준에 따라 다른 채널 (예 : stderr, file)에 동시에 쓰는 등 로깅 출력에 훨씬 더 많은 유연성과 성능을 제공합니다.

(2) "with"구문을 사용하여 위의 로직을 구현하는 것이 좋습니다.

+0

Google에서 'python logf'를 검색 할 때 logf는 무엇이며 어디에서나 찾을 수 없습니다. – Blankman

+0

아, 그 변수는 미안한 로깅을 사용하고 있다고 생각했습니다. – Blankman

6

당신은 logging module 사용할 수 있습니다 다운로드가되지 않는 한, 실패하는 경우

% cat /tmp/myapp.log 
2010-08-01 17:50:45,960 ERROR __main__ integer division or modulo by zero 
+1

니스. 그러나 다운로드는 여전히 망가져 있습니다. 이것은 마술처럼 "실패하지 않고 처리를 계속"하지 않을 것입니다. –

2

이 모든 것을 포착합니다. 그러나 정확한 예외를 포착하는 것이 훨씬 더 낫습니다. 파이썬 < =이 로그 파일에 오류를 작성하고 코드를 계속 실행됩니다 2.7

while True 
    try: 
    doStuff() 
    except Exception, e: 
    f = open('log.txt', 'w') 
    f.write('An exceptional thing happed - %s' % e) 
    f.close() 
0

.