收到此错误 AttributeError("'NoneType' 对象没有属性 'lower'

问题描述 投票:0回答:1
def clean_arf(input_file_path):
    tree = et.parse(input_file_path)
    root = tree.getroot()
    
    for monitoredAction in root.xpath('//AgentRecordingFile//MonitoredActions//MonitoredAction'):

        application = monitoredAction.find('.//Application')
        elementName = monitoredAction.find('.//ElementName')
        elementType = monitoredAction.find('.//ElementType')
        action = monitoredAction.find('.//Action')
        baseUrl =  monitoredAction.find('.//BaseURL')
        windowTitle = monitoredAction.find('.//WindowTitle')
        isRemove = False
     
        # Applying condition 1
                
        if((application.text != None) and (elementName.text != None)):
            if (application.text.lower() in ('iexplorer','chrome','msedge') and (elementType.text.lower() == 'client')):
              isRemove = True
        else:
            pass

错误:

AttributeError("'NoneType' object has no attribute 'lower'")

更改此xpath

root.xpath('//AgentRecordingFile//MonitoredActions//MonitoredAction'):

root.xpath('//MonitoredActions//MonitoredAction'):

获得最终输出,但同时数据清理没有进行

python ml
1个回答
1
投票

您的代码正在检查第 17 行中的

application.text != None
elementName.text != None
,但在下面一行您正在使用
elementType.text.lower()
,而不测试 elementType.text 是否确实存在。我假设这是一个复制和粘贴问题,并且您实际上想测试第 17 行中的
elementType.text != None

顺便说一句,更常见的(“pythonic”)习惯用法是使用

application.text is not None
而不是
application.text != None
,但差异主要是风格上的。此外,您还可以使用这样一个事实:在测试中,
None
和空字符串(以及 0 和空列表)被视为
False

编写代码的常见方法是:

if application.text and application.text.lower() in ('iexplorer','chrome','msedge') and elementType.text and elementType.text.lower() == 'client':

© www.soinside.com 2019 - 2024. All rights reserved.