陷入异常循环

2024-09-28 03:20:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在解析从链接列表返回的HTML。当我在每个HTML文档中到达某一点时,我会引发一个异常。在

import urllib2, time, 
from HTMLParser import HTMLParser

class MyHTMLParser2(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if somethings:
            do somethings
        if tag == "div" and "section2" in attrs[0][1]:
            raise NameError('End')

parser2 = MyHTMLParser2()
cntr = 0
for links in ls:
    try:
        f = urllib2.urlopen(links)
        parser2.feed(f.read())
        cntr+=1
        if cntr%10 == 0:
            print "Parsing...", "       It has benn", (time.clock()-start)/60, 'mins.'
            break

    except Exception, e:
        print 'There has been an error Jim.    url_check number', cntr
        error_log.write(links)
        continue

它只对第一个链接执行一次try语句,然后将exception子句执行到无穷大。在

一旦发生异常,我如何让它转到下一个链接

error_log来自于它可能遇到的与urllib2有关的其他错误,大多数情况下它们似乎无法足够快地连接到网页。因此,如果有一种方法可以在不引发异常的情况下退出{},那就太好了。这样我就可以重新实现error_log


Tags: importlogiftime链接htmltagerror
2条回答

不应在出现异常的情况下停止解析器。解析是一个相当复杂的过程,通常,最好让解析器完成,收集所需的信息,并在解析器完成任务后处理这些信息。这样,您就可以将软件中的不同内容分离开来,使所有东西都更易于维护、调试和理解。在

不,您的诊断不正确,这里没有无限的异常循环。每个URL都是一个完全独立的例外。在

无论何时发生异常,cntr变量都不会更新,这可能会给您一个的印象,即您最终会进入异常循环。或者将cntr += 1行移出try:语句的,或者使用enumerate()为您生成一个计数器。在

也就是说,为什么要用一个解析器实例解析多个HTML页面?您经常得到的异常很可能是特定页面的格式不正确,并将解析器置于无法继续运行的状态。在

相关问题 更多 >

    热门问题