简体   繁体   中英

I am trying to import xml file with some empty attributes to table. getting this error AttributeError: 'NoneType' object has no attribute 'strip'

def XML_get_fields_and_types_and_data_levels_3(xml_file_name):
    data_2d = []
    for child in root:
        grandchildren = child.findall(".//")
        fields = []
        types = []
        data_1d = []
        data_2d.append(data_1d)
        for grandchild in grandchildren:
            data_1d.append(convert_string_to_type(grandchild.text))
        if grandchild.tag not in fields:
            fields.append(grandchild.tag)
            types.append(get_type_of_string(grandchild.text))
    return (fields, types, data_2d)

def get_type_of_string(string):
    clean_string = string.strip()
    try:
        if  clean_string is not None:
            clean_string = string.strip()
            return string.strip()
        if "." in clean_string:
            clean_string = string.split()
            if isinstance(clean_string, list):
                point_or_segment = [float(i) for i in clean_string]
                if len(point_or_segment) == 2:
                    return 'POINT'
                else:
                    return 'LSEG'
            else:
                val = float(clean_string)
                return 'REAL'
        else:
            val = int(clean_string)
            return 'INTEGER'
    except ValueError:
        return 'TEXT'

the issue is the line-of-code (loc) after your method definition,

def get_type_of_string(string): clean_string = string.strip()

there string might be None , so the exception is raised. Instead of re-writing the method for you, which would easy for me but not be very helpful for you, I suggest you to re-design this method. Here are my hints:

  • there is duplicated code
  • the split() method always returns a list, no matter if the separator is found, isn't, so there is no need for this line to exists if isinstance(clean_string, list)
  • then why is this conversion in place if then val is not used thereafter? the easiest way to evaluate a variable type is by using the isinstance() builtin method as you did it few lines above.
  • try to split this method, in simpler and smaller methods, or try to simplify its logic.

Hope this hints will help you through. Enjoy coding.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM