python

python运行中常见错误总结

2022-11-30  本文已影响0人  软件开发技术修炼

运行python程序时,经常会遇到一些常见的错误,每次都会进行baidu搜索,故总结以便尽快排查。

错误一:AttributeError: ‘NoneType‘ object has no attribute ‘xxx‘;

错误属性:“nonetype”对象没有'xxx'属性

一、Nonetype类型

首先了解:

  1. NoneType类型只有一个值None.
None的类型
  1. Nonetype类型不支持任何运算也没有内建方法
二、报错的原因

Nonetype类型只有一个None,反推也就是出现问题的语句中,含有了 None这个变量。而根据前面知道,None是没有任何内建方法的,从而也就没有了任何属性。

三、查找变量为None的原因

变量为None的原因常常在于…

3.1 读取文件中的数据不成功~~filepath文件路径不正确

3.1.1 文件路径中的文件夹名称错误
3.1.2 文件名路径中的特殊符号的中英文错误
3.1.3 文件名的格式后缀错误,比如.png–>,jpg

检验方法:
os.path.exists(filepath)

相对路径的使用中…
./和../使用错误

检验方法:
os.getcwd()获得当前python的工作路径

四、最终检验结果:

如上检查了xmind文件的路径,都无问题:

检查路径中有个文件名中有空格,去掉,仍有问题;
然后重新复制一份xmind文件到该文件夹,运行代码无问题;
考虑到文件名包含apitestcase,于是换了中文名字仍不行;
难道是xmind文件内容存在错误,修改了,仍不行;
最后,把xmind文件在本地xmind打开,重新保存了下,问题解决。

【最终,我只能说下次遇到这种问题打开xmind重新保存下试试】

错误二:TypeError: count_case() takes 1 positional argument but 2 were given

问题的起始:本来代码是这样,正常运行,然后想着为啥要多此一举弄二个函数呢

    def get_story(self):
        out = xmind_to_dict(self.xmindfile)
        story = out[0]['topic']['topics']
        return story

    # 对xmind文件进行内循环判断,需传参
    def count_case(self, story):
        # count1 = 0
        for i in story:
            if "topics" not in i.keys() and "title" in i.keys():
                self.count1 += 1
                # print(self.count1)
            else:
                for k,v in i.items():
                    if "topics" == k:
                        self.count_case(v)
                    else:
                        continue
        return self.count1

然后就优化成下方这样,无需传参,一步到位,然而一直在报错

 # 对xmind文件进行内循环判断,需传参
    def count_case(self):
        out = xmind_to_dict(self.xmindfile)
        story = out[0]['topic']['topics']
        for i in story:
            if "topics" not in i.keys() and "title" in i.keys():
                self.count1 += 1
                # print(self.count1)
            else:
                for k,v in i.items():
                    if "topics" == k:
                        self.count_case(v)
                    else:
                        continue
        return self.count1
报错如下

最终发现,44行,因内层循环遍历,传了一个v,实际上函数中未定义。

上一篇下一篇

猜你喜欢

热点阅读