首页 > 解决方案 > 如何不收到“无类型”错误消息

问题描述

下面我附上了我的 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)

标签: python

解决方案


你需要先测试你是否得到了元素

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)

推荐阅读