鱼C论坛

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

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

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

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

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

x
有一XML文件,如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <catalog>
  3.     <maxid>4</maxid>
  4.     <login username="pytest" passwd='123456'>
  5.         <caption>Python</caption>
  6.         <item>ok</item>
  7.     </login>
  8.     <maxid>5</maxid>
  9.     <login username="pytest" passwd='123456'>
  10.         <caption>测试</caption>
  11.         <item></item>
  12.     </login>
  13.     <maxid>6</maxid>
  14.     <login username="pytest" passwd='123456'>
  15.         <caption>测试用</caption>
  16.         <item>okokok</item>
  17.     </login>
  18. </catalog>
复制代码

python代码如下:
  1. from xml.dom.minidom import parse

  2. dom = parse('abc.xml')
  3. data = dom.documentElement
  4. stus = data.getElementsByTagName('login')
  5. for stu in stus:
  6.     a = stu.getElementsByTagName('caption')[0].childNodes[0].nodeValue
  7.     b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
  8.     print(a,b)
复制代码

运行后错误提示如下:
  1. b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
  2. IndexError: list index out of range
复制代码

主要问题是因为  <item></item>中无值引起报错,请问:如何将这空值默认为0输出不报错?(不修改原始数据)
请前辈高手帮解决下。谢谢了!
最佳答案
2021-3-5 08:05:35
本帖最后由 qq1151985918 于 2021-3-5 08:08 编辑

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

  2. dom = parse('abc.xml')
  3. data = dom.documentElement
  4. stus = data.getElementsByTagName('login')
  5. for stu in stus:
  6.     try:
  7.         a = stu.getElementsByTagName('caption')[0].childNodes[0].nodeValue
  8.     except IndexError:
  9.         a = None
  10.         
  11.     try:
  12.         b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
  13.     except IndexError:
  14.         b = None
  15.     print(a,b)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-4 17:37:02 | 显示全部楼层
try-except
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个不行……会跳过
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-4 20:42:29 | 显示全部楼层
来个大佬指点下~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

什么叫会跳过

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

如果实现不了你需要的效果,只能说你的 try-except 没用对

  1. try:
  2.     a = stu.getElementsByTagName('caption')[0].childNodes[0].nodeValue
  3.     b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
  4. except IndexError:
  5.    continue
复制代码
小甲鱼最新课程 -> https://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表示都行,就是不能漏掉数据)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  2. dom = parse('abc.xml')
  3. data = dom.documentElement
  4. stus = data.getElementsByTagName('login')
  5. for stu in stus:
  6.     try:
  7.         a = stu.getElementsByTagName('caption')[0].childNodes[0].nodeValue
  8.     except IndexError:
  9.         a = None
  10.         
  11.     try:
  12.         b = stu.getElementsByTagName('item')[0].childNodes[0].nodeValue
  13.     except IndexError:
  14.         b = None
  15.     print(a,b)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

xswl
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 00:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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