吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1244|回复: 12
收起左侧

[已解决] python Try Exception写错了?

[复制链接]
double07 发表于 2021-5-9 23:11
本帖最后由 double07 于 2021-5-10 09:38 编辑

直入主题,上代码,请问这样错在哪里,怎样修改?
[Python] 纯文本查看 复制代码
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)[0]  # 土地类型
except Exception as e:
    print(str(e), "执行B计划,取划拨")
    use_righ = re.findall(r'划拨', concat)[0]  # 土地类型
except Exception as e:
    print(str(e), "执行C计划,取集体")
    use_righ = re.findall(r'集体', concat)[0]  # 土地类型
except Exception as e:
    print(str(e), "执行D计划,取转让")
    use_righ = re.findall(r'转让', concat)[0]  # 土地类型
except Exception as e:
    print(str(e), "非出让")
    use_righ = ' '

print(use_righ)

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
黑彩 + 1 + 1 热心回复!
cjcmxc + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

漁滒 发表于 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捕获的是所有可能出现的异常并处理,只能用一次,多次定义是没效果的。

免费评分

参与人数 1吾爱币 +1 收起 理由
double07 + 1 热心回复!

查看全部评分

Loker 发表于 2021-5-10 08:33
Python try捕获的异常不能是同种类型吧。这样他会出bad Except clauses order的警告。
可以这么写(多个except捕获不同类型的异常):
[Python] 纯文本查看 复制代码
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语句来处理多个异常信息,如下所示:

[Python] 纯文本查看 复制代码
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判断呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 15:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表