利用 Python 处理 AttributeError 及其支持的异常

您正在使用 Selenium 和 BeautifulSoup 从多个网页中提取数据,其中一些网页具有不同的 HTML 格式。当您处理其中一个具有不同格式的网页时,遇到了一次 AttributeError 异常。您希望用代码实现以下功能:当遇到该异常后,能够尝试执行其他代码,然后从异常发生处继续执行程序。

price = soup.find('li', {'id' :'J_PromoPrice'})
priced = price.find('strong', {'class' :'tb-rmb-num'}).text
if priced == "":
   priced = price.find('strong', {'class' :'tb-rmb-num'}).text
else:
   print ("No Normal Price Found")

这个代码包含了一个 if-else 语句,用于检测 priced 是否为空。如果它为空,则会尝试使用另一个标签来查找文本,以处理两种不同的 HTML 格式。然而,对于第三种 HTML 格式,它甚至没有找到这个标签,而是在其他位置找到了这个标签。因此,您希望在遇到 AttributeError 异常时,能够从其他位置获取文本,然后继续执行程序。

  1. 解决方案:
    您可以使用 try-except 语句块来实现这个功能。try-except 语句块可以用来捕获异常,并执行相应的异常处理逻辑。在您的情况下,您可以使用如下代码:

    price = soup.find('li', {'id' :'J_PromoPrice'})
    try:
        priced = price.find('strong', {'class' :'tb-rmb-num'}).text
        if priced == "":
            priced = price.find('strong', {'class' :'tb-rmb-num'}).text
        else:
            print ("No Normal Price Found")
    except AttributeError:
        # 在这里执行异常处理代码
        # 例如,尝试从其他位置获取文本
    

    当程序执行到 try 块中的代码时,如果发生 AttributeError 异常,程序就会执行 except 块中的代码。在 except 块中,您可以尝试执行其他代码,以从其他位置获取文本。

    下面提供一个简单的代码示例,演示了如何使用 try-except 语句块来捕获 AttributeError 异常:

    try:
        # 尝试执行可能发生 AttributeError 异常的代码
        value = None
        value.text
    except AttributeError:
        # 如果发生 AttributeError 异常,则执行异常处理代码
        print("Value is None, cannot access its text attribute.")
    

    当您运行这段代码时,程序会输出 “Value is None, cannot access its text attribute.”,因为变量 value 为 None,并且您尝试访问它的 text 属性,从而导致 AttributeError 异常。

    在您的具体场景中,您可以在 except 块中添加代码,以从其他位置获取文本,并继续执行程序。例如,您可以添加如下代码:

    except AttributeError:
        # 尝试从其他位置获取文本
        priced = soup.find('strong', {'class' :'tb-rmb-num-2'}).text
        if priced == "":
            priced = soup.find('strong', {'class' :'tb-rmb-num-3'}).text
        else:
            print ("No Normal Price Found")
    

    这段代码会尝试从其他两个标签中获取文本,如果这些标签中也没有文本,则会打印 “No Normal Price Found”。您还可以根据您的实际需求,添加其他异常处理逻辑。在这里插入图片描述

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python中,`hex()`是一个内置函数,其作用是将整数转换为十六进制字符串。然而,如果你尝试在一个字符串上调用`hex()`方法,就会出现`AttributeError: 'str' object has no attribute 'hex'`的异常。 例如,以下代码会导致这个异常: ``` s = "Hello, world!" hex_s = s.hex() ``` 要解决这个问题,你需要将字符串转换为字节数组,然后再调用`hex()`方法。可以使用`encode()`方法将字符串编码为字节数组,如下所示: ``` s = "Hello, world!" b = s.encode() hex_b = b.hex() ``` 这样就可以将字符串转换为十六进制字符串了。 ### 回答2: "AttributeError: 'str' object has no attribute 'hex'" 异常是由于对一个字符串对象调用了不存在的方法 'hex' 导致的。 在 Python 中,'hex' 是一个用于将整数转换为十六进制表示的内置方法。然而,字符串对象并没有这个方法。所以当我们尝试在一个字符串对象上调用 'hex' 方法时,就会引发 AttributeError 异常。 要解决这个异常,我们需要确保我们调用 'hex' 方法的对象是一个整数类型,而不是字符串类型。 例如,假设我们有一个名为 'num' 的变量,并且我们想将其转换为十六进制表示。如果我们在 'num' 是字符串类型时尝试调用 'hex' 方法,就会触发异常。 要解决这个问题,我们可以使用内置函数 'int' 将字符串类型的 'num' 转换为整数类型,然后再调用 'hex' 方法。 示例代码如下: ``` num = '10' # 假设num是一个字符串类型 num = int(num) # 将字符串类型转换为整数类型 hex_value = num.hex() # 调用 'hex' 方法来获取num的十六进制表示 print(hex_value) ``` 在上面的代码中,我们首先将 'num' 从字符串类型转换为整数类型,然后再调用 'hex' 方法来获取其十六进制表示。这样,就可以避免 'AttributeError: 'str' object has no attribute 'hex'' 异常。 总结起来,当出现 'AttributeError: 'str' object has no attribute 'hex'' 异常时,我们需要检查并确保我们调用的方法适用于对象的类型,并适当地进行类型转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值