我编写了一个解析一些网页的 python 守护进程。但有时会因为某些页面与解析器不兼容而出现错误。
实际上的问题是:如何使脚本在出现错误时不停止,而是继续工作?如果可能的话,将所有错误记录在日志文件中。
谢谢。
我的部分代码:
# row - array of links
for row in result:
page_html = getPage(row['url'])
self.page_data = row
if page_html != False:
self.deletePageFromIndex(row['id'])
continue
parser.mainlink = row['url']
parser.feed(page_html)
links = parser.links # get links from page
words = wordParser(page_html); # words from page
# insert data to DB
self.insertWords(words)
self.insertLinks(links)
# print row['url'] + ' parsed. sleep... '
self.markAsIndexed(row['id'])
sleep(uniform(1, 3)) # sleep script
最佳答案
您可以执行以下操作:
import logging
should_abort = False
def do_stuff():
global should_abort
...
def main():
while not should_abort: # your main loop
try:
do_stuff()
except MyException1, e:
logging.exception('GOT MyException1 %s', e)
except MyException2, e:
logging.exception('GOT MyException2 %s', e)
except Exception, e:
logging.exception('UNKNOWN EXCEPTION %s', e)
这仍然允许您停止使用 ctrl-C,因为 KeyboardInterrupt
派生自 BaseException
,而不是 Exception
。
关于Python:错误不会停止脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15354007/