Я загружаю файл с сети, и она перестала работать даже при том, что я делаю:
для p в запросе:
try:
except IOError as e:
print e;
Если существует ошибка, я хочу зарегистрировать ее и затем продвинуться со следующим файлом.
В этом цикле я пытаюсь загрузить изображение, если по некоторым причинам имя файла было плохо, или веб-сайт снизился, и т.д., я хочу продолжить следующий объект в для цикла.
Существует ли более универсальная ошибка, которая не приведет к сбою и продолжит обрабатывать?
Кроме того, как я могу зарегистрировать ошибки в файл?
Как указал Lott, если загрузка не удается, если проблема не устранена выше по течению (или с вашим адресом загрузки), лучшее, что вы можете сделать, это попробовать еще раз. Однако, если ситуация такова, что у вас есть список загрузок, и вы просто хотите пропустить неудачные загрузки вместо выхода, то:
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, файл) в зависимости от уровня ошибок, и т.д. и т.п.
(2) Вы можете рассмотреть возможность реализации приведенной выше логики с помощью конструкции "with
".
Это ловит все. Но гораздо лучше поймать точное исключение. python <= 2.7
while True:
try:
doStuff()
except Exception, e:
f = open('log.txt', 'w')
f.write('An exceptional thing happed - %s' % e)
f.close()
Можно использовать модуль логирования:
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:
% cat /tmp/myapp.log
2010-08-01 17:50:45,960 ERROR __main__ integer division or modulo by zero