Python 我正在尝试将带有一些空属性的xml文件导入到表中。获取此错误属性错误:';非类型';对象没有属性';条状';

Python 我正在尝试将带有一些空属性的xml文件导入到表中。获取此错误属性错误:';非类型';对象没有属性';条状';,python,xml,postgresql,Python,Xml,Postgresql,问题是方法定义后的代码行(loc) def get_type_of_string(字符串): clean_string=string.strip() 有字符串可能是无,因此引发异常。我建议你重新设计这个方法,而不是为你重新编写这个方法,这对我来说很容易,但对你没有多大帮助。以下是我的提示: 有重复的代码 split() 那么,如果此后未使用thenval,为什么要进行此转换?计算变量类型的最简单方法是使用isinstance()builtin方法,就像上面几行那样 尝试将此方法拆分为更简单和更

问题是方法定义后的代码行(loc)

def get_type_of_string(字符串):
clean_string=string.strip()

字符串
可能是
,因此引发异常。我建议你重新设计这个方法,而不是为你重新编写这个方法,这对我来说很容易,但对你没有多大帮助。以下是我的提示:

  • 有重复的代码
  • split()
  • 那么,如果此后未使用then
    val
    ,为什么要进行此转换?计算变量类型的最简单方法是使用
    isinstance()
    builtin方法,就像上面几行那样
  • 尝试将此方法拆分为更简单和更小的方法,或者尝试简化其逻辑

希望这些提示能帮助你度过难关。喜欢编码。

您用什么来调用这些函数?参数中包含的内容对您遇到的错误非常重要:)实际上,我想将一个输入转换为点,这就是为什么我写下这个函数。但是在这里,当我尝试剥离空属性时,它会给出错误,如何处理它?第一次出现
string.strip()
不受
保护,如果字符串不是None:
@Saira
clean\u string=string.strip()
导致错误,您在错误处理之前调用该错误。该行只能在
try
块内调用。您的代码也可以做一些小的改进,但假设其他一切都很好,上述方法应该可以解决您的问题(即删除当前的
get\u type\u of_string
函数的第一行)。
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'