Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 22, 2014 20:21:27

tufedtm
Зарегистрирован: 2014-04-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

пропуск ошибок

def save_page(countBegin, countEnd, way):
    # count = int(page_count())
    masUrl = []
    for a in range(countBegin, countEnd, way):
        url = 'http://www.epicwar.com/maps/?page=' + str(a) + '&sort=time&order=desc'
        masUrl.append(url)
    f = open(path + fileName, 'wb')
    f.close()
    f = open(path + fileName, 'a')
    for a in masUrl:
        request = urllib.request.urlopen(a)
        temp = open(path + 'temp', 'wb')
        temp.write(request.read())
        string = open(path + 'temp').read()
        pattern = re.compile(r'<a.+?\s*</td>\s+<td\s.+?</td>')
        found = re.findall(pattern, string)
        for b in found:
            f.write(b)
        print(a)
        if UnicodeError:
            continue
    f.close()
<...>
def mProc():
    from multiprocessing import Process
    count = int(page_count())
    p1 = Process(target=save_page, args=(round(count / 5), 0, -1))
    p1.start()
    p2 = Process(target=save_page, args=(round(count / 5 * 2), round(count / 5), -1))
    p2.start()
    p3 = ...
if __name__ == '__main__':
    mProc()
вроде бы добавил обработку ошибок, но все равно выдает
Process Process-1:
Traceback (most recent call last):
File “C:\Python340\lib\multiprocessing\process.py”, line 254, in _bootstrap
self.run()
File “C:\Python340\lib\multiprocessing\process.py”, line 93, in run
self._target(*self._args, **self._kwargs)
File “C:\Users\abaga\PycharmProjects\learn\ew.py”, line 48, in save_page
string = open(path + ‘temp’).read()
File “C:\Python340\lib\encodings\cp1251.py”, line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)
UnicodeDecodeError: ‘charmap’ codec can't decode byte 0x98 in position 5221: character maps to <undefined>

Отредактировано tufedtm (Апрель 22, 2014 20:21:49)

Офлайн

#2 Апрель 22, 2014 22:18:12

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

пропуск ошибок

tufedtm
if UnicodeError:
            continue

Это не обработка ошибок смотрите try, except



Офлайн

#3 Апрель 23, 2014 16:09:44

tufedtm
Зарегистрирован: 2014-04-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

пропуск ошибок

спасибо!
заменил на

    for a in masUrl:
        try:
            request = urllib.request.urlopen(a)
            temp = open(path + 'temp', 'wb')
            temp.write(request.read())
            string = open(path + 'temp').read()
            pattern = re.compile(r'<a.+?\s*</td>\s+<td\s.+?</td>')
            found = re.findall(pattern, string)
            for b in found:
                f.write(b + '\n')
            print(a)
        except:
            continue

Офлайн

#4 Апрель 23, 2014 21:25:25

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

пропуск ошибок

continue
А цель какая? Если просто ошибки замазать то это не очень хорошо с идеологической точки зрения. вместо continue чаще пишут pass оно говорит что делать тут нечего. Если не хотите видеть ошибки в консоли сохраните их в файле. см logging



Офлайн

#5 Апрель 24, 2014 06:34:33

tufedtm
Зарегистрирован: 2014-04-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

пропуск ошибок

целью было пропуск ошибок, без прерывания цикла, но т.к. их оказалось куда больше чем я думал (~600 стр с ошибками * 25 результатов (pattern) на страницу), то теперь думаю над решением как пропускать не всю страницу, а только один (неверный) из 25 результатов

Отредактировано tufedtm (Апрель 24, 2014 06:37:15)

Офлайн

#6 Апрель 24, 2014 09:48:56

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

пропуск ошибок

Вуалирование абсолютно всех возможных исключений травмоопасно. Лучше явно прописывать ожидаемые типы.

Офлайн

#7 Апрель 24, 2014 21:06:37

tufedtm
Зарегистрирован: 2014-04-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

пропуск ошибок

Shaman
да, понимаю
но в данном случае никаких других, кроме UnicodeDecodeError, не будет
(хотя, может не стоит быть таким уверенным)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version