Ошибка механизации - Python - PullRequest
2 голосов
/ 24 июня 2011

Я пытаюсь использовать механизацию для просмотра и сбора данных с различных веб-сайтов. Я столкнулся с ошибкой, в которой говорится

No handlers could be found for logger "mechanize"

Эта ошибка не дает конкретного места, где она произошла, что делает ее очень трудной для отладки. Я посмотрел онлайн и увидел, что механизированная версия 0.1.11 решила эту проблему. Я скачал более новую версию Mechanize и думаю, что это больше не должно быть проблемой. Мой код, который вызывает эту проблему,

def KEGG(textfile):  
    KEGGString = ''  
    KEGGList = []  
    original = open('Final.txt', 'r')    
    for row in original:      
        data = re.split("(#|\t)", row) ##splits text files by tabs into separate strings  
        new_items = [x if x!='\t' else 'None' for x in data]  ##replaces extra tabs with "None"  
        KEGGList.append(new_items[-1])  
    KEGGHeaderless = KEGGList[1:] ## Removes header (Cross-Reference (KEGG)) from the list.  
    KEGGHeaderless = [s.replace(';', '') for s in KEGGHeaderless]  
    fo = open('KEGG Description.txt', 'w')  
    for row in KEGGHeaderless:  
       geneID = row  
       base2 = 'http://www.genome.jp/dbget-bin/www_bget?'  
       url = base2 + geneID  
       br = Browser()  
       br.set_handle_robots(False)  
       br.open(url)  
       for line in KEGGHeaderless:  
            targetURL = '/dbget-bin/get_linkdb?-t+pathway+' + row  
            try:  
                site = br.follow_link(url=targetURL)  
                br.open(site)  
                page = br.response().read()  
                fo.write(page)  
            except:   
                fo.write(line + "None\n")   
    fo.close()

Есть предложения, как решить эту проблему?

1 Ответ

0 голосов
/ 24 июня 2011

mechanize использует модуль logging.Если ваш сценарий не предоставляет обработчик журналирования, то регистрация вызовов изнутри mechanize может привести к этой ошибке.

Чтобы предоставить универсальный обработчик, попробуйте добавить

import logging
logging.basicConfig(level=logging.DEBUG)

в ваш скрипт,Это покажет все сообщения регистрации уровня DEBUG или выше.Если вы хотите показывать только критические ошибки, вы можете изменить его на

logging.basicConfig(level=logging.CRITICAL)

Или, если вы хотите отключить ведение журнала, вы можете использовать

logging.disable(logging.DEBUG)

См. документы для других параметров и уровней ведения журнала.

...