好程序员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 的一堆工具散乱的扔给你,一是占空间,二是用起来你得记住对应的函数才行,而第一种可以采用 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 ,欠拟合了,结果还是不好。所以就是在这样的不断迭代优化的过程中,我们学习的知识模型的泛化能力越来越好。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。