AttributeError:“模块”对象没有属性“ ValueError”

时间:2018-12-05 20:06:23

标签: python pandas dataframe apply

因此,我在使用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'。

有人知道我在做什么错或如何解决我的问题吗?目的只是用NaN标记请求网址,以便我可以将该方法应用于我的数据集。

2 个答案:

答案 0 :(得分:3)

您可以指定例外列表,使代码简洁明了。

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

答案 1 :(得分:1)

这是因为ValueError是Python内置的异常,不是tld的成员。使用except ValueError代替tld.exceptions.ValueError