AttributeError: у объекта 'module' нет атрибута 'ValueError' - PullRequest
0 голосов
/ 05 декабря 2018

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

import tld
from tld import get_fld

#Custom try-except function to handle IPs and garbage http requests
def try_get_fld(x):
    try: 
        return get_fld(x)
    except tld.exceptions.TldBadUrl: 
        return np.nan
    except tld.exceptions.TldDomainNotFound:
        return np.nan

#Apply the function above to the request dataframe
request['flds'] = request['request'].apply(try_get_fld)

Но в другой день я столкнулся с новой ошибкой:

ValueError: Invalid IPv6 URL

ТакЯ добавил к исключениям:

def try_get_fld(x):
    try: 
        return get_fld(x)
    except tld.exceptions.TldBadUrl: 
        return np.nan
    except tld.exceptions.TldDomainNotFound:
        return np.nan
    except tld.exceptions.ValueError:
        return np.nan

Затем я столкнулся с ошибкой атрибута:

AttributeError: 'module' object has no attribute 'ValueError'

Поэтому я добавил это к исключениям:

def try_get_fld(x):
    try: 
        return get_fld(x)
    except tld.exceptions.TldBadUrl: 
        return np.nan
    except tld.exceptions.TldDomainNotFound:
        return np.nan
    except tld.exceptions.ValueError:
        return np.nan
    except tld.exceptions.AttributeError:
        return np.nan

ЗатемЯ получаю AttributeError: у объекта 'module' нет атрибута 'ValueError' снова.

Кто-нибудь знает, что я делаю неправильно или как исправить мою проблему?Цель состоит в том, чтобы просто пометить URL запроса с помощью NaN, чтобы я мог применить метод к своему набору данных.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

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

def try_get_fld(x):
    try: 
        return get_fld(x)
    except (tld.exceptions.TldBadUrl, 
            tld.exceptions.TldDomainNotFound, 
            ValueError): 
        return np.nan
0 голосов
/ 05 декабря 2018

Это потому, что ValueError является встроенным исключением Python, а не членом tld.Используйте except ValueError вместо tld.exceptions.ValueError.

...