double07 发表于 2021-5-9 23:11

python Try Exception写错了?

本帖最后由 double07 于 2021-5-10 09:38 编辑

直入主题,上代码,请问这样错在哪里,怎样修改?import chardet
import requests
from bs4 import BeautifulSoup
import re

response = requests.get("https://itemcdn.tmall.com/desc/icoss37757230056cf740963d9fe136?var=desc")
encodingInfo = chardet.detect(response.content)
r_response = response.content.decode(encodingInfo['encoding'], 'ignore')
a = response.text.strip('var desc=')
soup = BeautifulSoup(a, features="lxml")
lst = []
for l in soup.find_all('span'):
    if l.text != '\xa0':
      lst.append(l.text)
concat="".join(lst) #合并列表字符串
try:
    use_righ = re.findall(r'出让', concat)# 土地类型
except Exception as e:
    print(str(e), "执行B计划,取划拨")
    use_righ = re.findall(r'划拨', concat)# 土地类型
except Exception as e:
    print(str(e), "执行C计划,取集体")
    use_righ = re.findall(r'集体', concat)# 土地类型
except Exception as e:
    print(str(e), "执行D计划,取转让")
    use_righ = re.findall(r'转让', concat)# 土地类型
except Exception as e:
    print(str(e), "非出让")
    use_righ = ' '

print(use_righ)

漁滒 发表于 2021-5-9 23:28

按照你希望的逻辑来说,你需要在except中不断套try语句

kesai 发表于 2021-5-9 23:33

捕获到异常了啊,没查找到'出让'

鬼魅王子 发表于 2021-5-9 23:41

py不是很懂,但是我估计你是第一次没找到 就 执行B计划,第二次没找到就执行C计划,但是 你这只有第一句补货到了异常然后处理掉了,后面的处理只是说对异常的不同处理方法.想要解决,应该是嵌套 try exception
不然就是对不同的报错进行执行不同的计划,但是捕获的异常都是同一个,就没有用了

涛之雨 发表于 2021-5-9 23:54

本帖最后由 涛之雨 于 2021-5-9 23:56 编辑

正确的用法是先判断findall的长度是不是0,如果不是0的话再去取内容
异常捕捉最好少使用,多判断

ligxi 发表于 2021-5-10 00:33

本帖最后由 ligxi 于 2021-5-10 10:30 编辑

Exception捕获的是所有可能出现的异常并处理,只能用一次,多次定义是没效果的。

Loker 发表于 2021-5-10 08:33

Python try捕获的异常不能是同种类型吧。这样他会出bad Except clauses order的警告。
可以这么写(多个except捕获不同类型的异常):
try:
    a = int(input('请输入一个被除数'))
    b = int(input('请输入除数'))
    c = float(a)/float(b)
    print(c)
except ZeroDivisionError:
    print('异常,被除数不能为零')
except ValueError:
    print('异常,不能输入字符串!')
except NameError:
    print('异常,变量不存在!')

except BaseException as e:
    print(e)
可以这么写(一个except捕获不同类型的异常):
使用except而带多种异常类型
你也可以使用相同的except语句来处理多个异常信息,如下所示:
try:
    正常的操作
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   发生以上多个异常中的一个,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

double07 发表于 2021-5-10 09:18

Loker 发表于 2021-5-10 08:33
Python try捕获的异常不能是同种类型吧。这样他会出bad Except clauses order的警告。
可以这么写(多个ex ...

谢谢,第一种不错,但我这代码是同类型异常,第二段代码可以,但达不到我要的效果

linyii 发表于 2021-5-10 09:57

except Exception as e:是捕获所有,所以你出现异常只会走第一个

那一年的白洁啊 发表于 2021-5-10 10:48

double07 发表于 2021-5-10 09:18
谢谢,第一种不错,但我这代码是同类型异常,第二段代码可以,但达不到我要的效果

既然是同类型的异常,那你只需要except一次就行了吧,然后再except里边做if判断呢?
页: [1] 2
查看完整版本: python Try Exception写错了?