python - 如何不收到“无类型”错误消息
问题描述
下面我附上了我的 XML 文档和我尝试为它编写的代码。我希望打印每个同事的姓名、专业、次要和毕业年份。由于不是每个工人都有未成年人,我想打印“N/A”,我不断收到此错误消息:minor = worker.find('minor').text or "n/a" AttributeError: 'NoneType' object has no attribute 'text' 这是我的 XML 文档:
<?xml version = "1.0" encoding = "UTF-8"?>
<workers>
<worker>
<name>Susan</name>
<major>Sociology</major>
<minor>Spanish</minor>
<gradyear>2014</gradyear>
</worker>
<worker>
<name>Jeremy</name>
<major>Neuroscience</major>
<gradyear>2016</gradyear>
</worker>
<worker>
<name>Leigh</name>
<major>Kinesiology</major>
<minor>Business Administration</minor>
<gradyear>2016</gradyear>
</worker>
<worker>
<name>Kenny</name>
<major>Biochemistry</major>
<gradyear>2012</gradyear>
</worker>
<worker>
<name>Sarena</name>
<major>Finance</major>
<gradyear>2018</gradyear>
</worker>
</workers>
这是我编写的代码:
import xml.etree.ElementTree as ET
tree = ET.parse('coworkers.xml')
root = tree.getroot()
for student in root.findall('workers'):
name = worker.find('name').text
major = worker.find('major').text
minor = worker.find('minor').text or "n/a"
gradyear = worker.find('gradyear').text
print("Workers:", name, "Major:", major, "Minor:", minor, "Graduation year:", gradyear)
解决方案
你需要先测试你是否得到了元素
import xml.etree.ElementTree as ET
tree = ET.parse('hw7.xml')
root = tree.getroot()
for student in root.findall('student'):
name = student.find('name').text
major = student.find('major').text
minor_elem = student.find('minor')
if minor_elem:
minor = minor_elem.text
else:
minor = "n/a"
gradyear = student.find('gradyear').text
print("Student:", name, "Major:", major, "Minor:", minor, "Graduation year:", gradyear)
或者如果您愿意,可以使用异常处理程序
import xml.etree.ElementTree as ET
tree = ET.parse('hw7.xml')
root = tree.getroot()
for student in root.findall('student'):
name = student.find('name').text
major = student.find('major').text
try:
minor = student.find('minor').text
except AttributeError:
minor = "n/a"
gradyear = student.find('gradyear').text
print("Student:", name, "Major:", major, "Minor:", minor, "Graduation year:", gradyear)
推荐阅读
- android - 在 API 上添加新数据后如何在 android studio 上刷新 RecyclerView?
- c# - 使同步数据库操作异步
- azure - 按 Azure 监视器日志中列表中的元素分组
- python - 使用正则表达式将时间码包装到括号中
- java - Amazon S3 通过重命名文件夹复制 150 万个对象
- android - 如何在不使用 android:sharedUserId="android.uid.system" 的情况下制作特权系统应用程序?
- c# - 在 C# 中使用 ChromeDriver 时如何设置域引用标头?
- ios - 新版本 有应用内购买无法与此版本一起提交
- postgresql - DBeaver 中连接到 PostgreSQL 数据库的待处理事务(自动提交设置为关闭,我从 sqleditor 工作表启动 COMMIT 命令)
- python-3.x - 使用Python重命名excel中的列名