2020-07-16
Python培训 Python编程
好程序员Python培训分享Python编程中常见的异常处理,今天将对python编程中经常会遇到的一些报错与异常的进行总结与分析,虽然不会面面俱到,但是可以提供一种面对这样的问题时的思考方法,会对python的编程能力的提高有所帮助。
初学python经常会遇到的一些错误:
下面错误类型的先后顺序基本上是按照从0到有一定基础的过程会遇到的一些报错问题:
NameError:在刚开始接触编程的朋友,容易犯这个错误,没有声明定义对应引用的变量,即,你来了一个无中生有。找到对应的变量,声明即可。
SyntaxError:这个出错,都是语法类型的错误,例如多个半括号,少个半括号,for循环时,末尾忘记英文冒号等等。出现这个错误,说明你对python的语法很不熟悉,多练习就是。
IndentationError:缩进不正确,python语法不熟练的明显表现,采用tab键进行缩进比较比较方便,例外科普一个小技巧,在jupyter中如果要对一堆代码进行批量缩进时,选中这堆代码,按tab来进行缩进,按shift+tab代码整体前进。
ImportError:开始出现这个错误,说明你有了一丢丢基础,开始要调包了。但是还不是很熟练python中第三方包的使用方法。这里具体说一下每一种方法的差异,就拿最常见的pandas来举例
import pandas as pd
导入pandas包,记为 pd。后续需要调用pandas库底下的子函数API时,这样操作:pd.read_csv 此时我们调用pandas下的一个文件读取函数read_csv,它支持许多格式的文件的读取,例如,csv,tsv,txt等等,具体需要去探究。
还有一种是:
from pandas import *
这个是导入pandas一级下属的所有API接口,相当于把pandas的一堆工具散乱的扔给你,一是占空间,二是用起来你得记住对应的函数才行,而diyi种可以采用tab补全的方法,知道API接口大概拼写即可。
还有一种:
from pandas import read_csv, concat
这个就比较简洁,只把自己需要的拿出来即可,在调用特别大的包的时候,这种方法比较好,例如sklearn,很少有见 import sklearn as sl 吧,就像一直负重前行。在知道自己具体要用哪几个API的情况下,这种最优。
TypeError:这个类型的错误慢慢开始由于一些有些复杂的原因引起。例如:
TypeError : argument of type 'int' is not iterable 此处是因为int不可迭代。
TypeError: cannot unpack non-iterable int object 此处是循环的变量中的元素不是一个可以。这一类型的错误需要你对python有一些掌握,例如dict的key是不可重复的等等,需要在错误中累积这一类的知识。
MoudleNotFoundError:就是你导入的包当前是木有的,这里顺便说一下各种下载包的方式,首先就是在编译器里,此操作不论是在Windows下还是公司的Linux下都可以这样:!pip install module_name 感叹号为英文的
但是如果是阿里云,腾讯云,百度的ai-stduio这种云服务器的话,需要做一定的改变:!pip install --user module_name 这个是一个小tip。个人有一种预感,以后云服务器会越来越普及,至少是在大数据算法爱好者中,Windows的,数据量稍微大一点,动不动就跑的死机,云服务器则不存在这个问题,而且现在慢慢开始有了限时免费的云服务器,再往以后可能就会像流量这样便宜。
ValueError:这个通常是在对一个数据容器进行拆解的时候,拆出来的元素个数与赋值的变量个数不匹配,例如:
a,b,c = ['1','1','1','1'] 里面四个元素,外面配三个变量,肯定报错
ValueError: too many values to unpack (expected 3)
当然还有其他的原因造成ValueError,例如:
ValueError: The truth value of a Series is ambiguous
ZeroDivisionError:这个就是你在做除法时,除数为0所致,python2与python3的除法有所不同,有时候容易犯这个错误。python2的只是取整数部分,不四舍五入,例如:
a=0.6
1/a 在python2中是会报错的。其他情况下报这个错,就需要检查一下你的对应变量的精度设置了,并且在循环指定条件逐步对某一初始为0的变量进行迭代累加的时候,也容易出现这个错误,例如,在机器学习算法或者推荐算法的召回率,准确率时,计算hit,数据质量较差时就容易出现这个问题。
IndexError:索引出错了,超出范围。
IndexError: list index out of range
KeyError:出现KeyError,基本说明你开始会用python了,因为字典dict是python中应用最为广泛的数据存储容器,学会字典的各种操作很重要。
FileNotFoundError:可能是在你开始采用python进行一些数据分析预测,或者推荐算法,或者nlp或者cv什么的时候,文件的路径或者文件格式,文件名出错导致文件找不到。
AttributeError:说通俗一些,就是某个数据结构或者类型没有某种操作,你却非要用这种操作,那就要报错了,例如:
AttributeError: 'tuple' object has no attribute 'remove'出现这样的错误的时候,说明对python各种东西学习的有些多,混淆了一些操作。例如list的元素添加是append,你非要用update来给list添加,而update是set或者dict的,如下:
AttributeError: 'list' object has no attribute 'update'
MemoryError:开始遇到这个错误的时候,说明你的python基础基本掌握,就是在你在处理一个比较大的数据集的时候,你的程序太low,例如,各种循环,嵌套循环,电脑被你玩蒙圈了,内存不足。这个说明一点,要开始学习python的数据结构与算法了,正式开始难点了。一些像小顶堆,大顶堆,二叉树,动态规划,链表,队列的家伙开始出现在你的视野里,并且开始看不懂一些诡异的很巧妙的小算法。
所以这就验证了一个说法,python入门容易,但请看清楚了,仅仅是入门容易,你不能一直站在门口吧,往里面走一点,你就要费点劲。因此,需要进一步去巩固基础的东西,这些日常的报错异常只是在反馈你的bug,自己的学习过程也是一个机器学习的train与test的过程,学到东西开始用习题拟合,如果习题都是你做过的,抱歉,过拟合了,当上test的时候,你的正确率就大幅下降,你就需要修正你的训练集了;如果你是个懒家伙,习题没做几个,就直接上test,欠拟合了,结果还是不好。所以就是在这样的不断迭代优化的过程中,我们学习的知识模型的泛化能力越来越好。
本文内容转载自网络,本着分享与传播的原则,版权归原作者所有,如有侵权请联系我们进行删除。
开班时间:2021-04-12(深圳)
开班盛况开班时间:2021-05-17(北京)
开班盛况开班时间:2021-03-22(杭州)
开班盛况开班时间:2021-04-26(北京)
开班盛况开班时间:2021-05-10(北京)
开班盛况开班时间:2021-02-22(北京)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2020-09-21(上海)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2019-07-22(北京)
开班盛况Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号