1

我试图用 3 个小时来解决这个问题。请问你能告诉我有什么问题吗?这些是我的代码

import urllib
from jin import HtmlMigrate
from bs4 import BeautifulSoup
import logging
list2=[]
logging.basicConfig( format='%(levelname)s:%(message)s', level=logging.INFO)
current = 1
source =""
for v in range(13960581, 13960585):
    list=[]
    try:
        fil = urllib.urlopen(source+str(v))
        fill = fil.read()
        soup = BeautifulSoup(fill)
        k = soup.find("div", "post-taglist")
        for i in k.findAll("a"):
            list.append(i.string)
    except AttributeError:
        pass
    if "python" in list:
        try:
            a = soup.find( "div", "post-text")
            list2.append(a)
            logging.info("%s question localized." % str(current))

        except AttributeError:
            pass

    current +=1
mig = HtmlMigrate()

out = file("stackover.html", "w")
for i in list2:
    mig.run(i, out)


out.close()

问题是我在控制台中为每个 logger.info 调用获得了重复的条目。我该如何解决这个问题?

4

3 回答 3

1

在调用之前设置断点logging.info()使用

import pdb; pdb.set_trace()

当您点击断点并出现pdb提示时,键入

p logging.getLogger().handlers

您应该会看到一个仅包含一个元素的列表 - a StreamHandler。如果不是这种情况,那么这将解释为什么您会为单个logging.info()呼叫获得多条线路。

于 2013-07-25T09:52:44.570 回答
1

这是我的刺:您没有看到重复的日志条目。相反,因为您的日志记录调用处于循环中,所以您会看到对logging.info.

(dis)确认这一点的一种方法是将您的日志记录调用更改为包括v

logging.info("[%s] %s question localized." % (v, str(current)))

让我们知道输出的样子。


编辑: OP 证实了我的理论;这个答案已经失效。

于 2013-07-24T18:43:13.843 回答
0

该材料来自讨论使用的日志记录模块的标准文档logging.basicConfig

注意:这个函数应该在其他线程启动之前从主线程调用。在 2.7.1 和 3.2 之前的 Python 版本中,如果从多个线程调用此函数,则有可能(在极少数情况下)将处理程序多次添加到根记录器,从而导致意外结果,例如消息在日志中重复。

如果这是从主程序线程以外的某个线程调用的,则可能是问题所在。我知道这应该是一个评论,但我没有足够的声誉。

于 2013-07-24T19:38:07.617 回答