鱼C论坛

 找回密码
 立即注册
查看: 1754|回复: 7

[已解决]python中空值的处理问题

[复制链接]
发表于 2021-3-4 17:16:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有一XML文件,如下:
<?xml version="1.0" encoding="utf-8"?>
<catalog>
    <maxid>4</maxid>
    <login username="pytest" passwd='123456'>
        <caption>Python</caption>
        <item>ok</item>
    </login>
    <maxid>5</maxid>
    <login username="pytest" passwd='123456'>
        <caption>测试</caption>
        <item></item>
    </login>
    <maxid>6</maxid>
    <login username="pytest" passwd='123456'>
        <caption>测试用</caption>
        <item>okokok</item>
    </login>
</catalog>
python代码如下:
from xml.dom.minidom import parse

dom = parse('abc.xml')
data = dom.documentElement
stus = data.getElementsByTagName('login')
for stu in stus:
    a = stu.getElementsByTagName('caption')[0].childNodes[0].nodeValue
    b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
    print(a,b)
运行后错误提示如下:
b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
IndexError: list index out of range
主要问题是因为  <item></item>中无值引起报错,请问:如何将这空值默认为0输出不报错?(不修改原始数据)
请前辈高手帮解决下。谢谢了!
最佳答案
2021-3-5 08:05:35
本帖最后由 qq1151985918 于 2021-3-5 08:08 编辑

居然还要喂到嘴里不然就吃不了饭
from xml.dom.minidom import parse

dom = parse('abc.xml')
data = dom.documentElement
stus = data.getElementsByTagName('login')
for stu in stus:
    try:
        a = stu.getElementsByTagName('caption')[0].childNodes[0].nodeValue
    except IndexError:
        a = None
        
    try:
        b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
    except IndexError:
        b = None
    print(a,b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-4 17:37:02 | 显示全部楼层
try-except
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-4 17:52:23 | 显示全部楼层

这个不行……会跳过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-4 20:42:29 | 显示全部楼层
来个大佬指点下~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-4 22:07:07 | 显示全部楼层
很费解啊,楼上已经告诉你了 try-except 了

什么叫会跳过

目的不就是为了遇到空值的时候跳过这个吗?

如果实现不了你需要的效果,只能说你的 try-except 没用对
try:
    a = stu.getElementsByTagName('caption')[0].childNodes[0].nodeValue
    b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
except IndexError:
   continue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-5 07:27:44 | 显示全部楼层
本帖最后由 jyb000 于 2021-3-5 07:30 编辑
Daniel_Zhang 发表于 2021-3-4 22:07
很费解啊,楼上已经告诉你了 try-except 了

什么叫会跳过


这个会跳过丢了一组数据。 如:测试  和空值这组数据得不到了~~我想不漏掉数据,能把测试  和空值都得到,(空值可替换为0表示或None表示都行,就是不能漏掉数据)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-5 08:05:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qq1151985918 于 2021-3-5 08:08 编辑

居然还要喂到嘴里不然就吃不了饭
from xml.dom.minidom import parse

dom = parse('abc.xml')
data = dom.documentElement
stus = data.getElementsByTagName('login')
for stu in stus:
    try:
        a = stu.getElementsByTagName('caption')[0].childNodes[0].nodeValue
    except IndexError:
        a = None
        
    try:
        b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
    except IndexError:
        b = None
    print(a,b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-5 15:10:08 | 显示全部楼层
qq1151985918 发表于 2021-3-5 08:05
居然还要喂到嘴里不然就吃不了饭

xswl
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 09:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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