刚才有个小伙伴艾特我,我说发生甚么事了?给我发了几张截图,我一看,哦,原来是运行程序报错了。我说你不会看报错信息么,这不好用,他不服气,我说我教你们读懂报错信息,这个有用,这是化劲儿。
言归正传,运行程序出错或者没有出现我们想要的结果,我们每天都会遇到这样的问题,遇到问题没关系,重要的是我们知道怎么找出问题的根源,然后解决问题。
有报错信息
运行程序,啪,很快啊,控制台出现了报错信息,这时我们需要读懂报错信息,有些伙伴发到群里的报错信息很明显了,可是他却看不懂。所以 pk哥给大家总结下常见的报错场景。
不要怕看报错信息,常见的报错就这几种,记住就行。
首先,我们需要知道常见的报错关键字。
“
SyntaxError:语法错误,代码形式错误
AttributeError:属性错误,特性引用和赋值失败时会引发属性错误
NameError:试图访问的变量名不存在
Exception:所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions模块中定义。
IOError:一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误
KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误
IndexError:索引错误,使用的索引不存在,常索引超出序列范围,什么是索引
TypeError:类型错误,内建操作或是函数用于在了错误类型的对象时会引发类型错误
ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误
ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。
”
下面举例说明下这几种常见的报错。
SyntaxError
SyntaxError,语法错误,报错信息里出现这个关键字,我们就要意识到语法有问题,报错信息再往上看,报错信息中还会用 ^ 指出语法出现问题的具体问题,这样我们就能快速定位语法有问题的地方。比如下面 for 循环后面忘了加冒号导致的语法错误。
这些语法错误没有技巧了,初学者只有记下来。
AttributeErro****r
属性错误,特性引用和赋值失败时会引发属性错误,举个例子,做过爬虫小项目的伙伴应该对 requests 库的用法比较熟悉。
response = requests.get(url)
用 requests 请求返回的数据为 requests.models.Response,你可以在实例中打印出它的类型查看。
response = requests.get(url, headers=headers)
print(type(response))
# 结果
<class 'requests.models.Response'>
Response 响应的常用属性如下:
response.text # 响应回去的文本(字符串)
response.content # 响应回去的内容(二进制),一般用来爬取视频
response.status_code # 响应的状态码
response.url # 获取请求连接地址
response.cookies # 获取返回的cookies信息
response.cookies.get_dict() # 获取返回的cookies信息
response.request # 获取请求方式
那如果对象不是 Response 类型,你也用来调用 text 属性,这时就会报属性错误:AttributeError
NameError
NameError,试图访问的变量名不存在,这个容易理解,有时变量名忘了定义或者变量名写错了都会报这个错。
program_language = 'Python'
name = '知识圈'
official_accounts = programer_language + name
上面例子中,我故意写错了一个单词 programer_language,这个单词没定义,所以会直接报 NameError 的错误。
NameError: name 'programer_language' is not defined
IOError
操作文件出错会报 IOError 的错误或者 IOError 的子类 FileNotFoundError。
with open('Python.txt', 'r', encoding='utf-8') as f:
f.read()
上方我打开的是一个在此目录下不存在的文件 Python.txt,运行后会报 FileNotFoundError。
FileNotFoundError: [Errno 2] No such file or directory: 'Python.txt'
KeyError
使用了映射中不存在的关键字(键)时引发的关键字错误,比如我们读取字典时,读取的 key 值不存在时会报 KeyError。
infos = {'official_accounts': 'Python知识圈', 'Bilibili': '菜鸟程序员的日常'}
print(infos['official_accounts'])
print(infos['zhihu'])
上面例子中,key 值为 official_accounts 的值是可以取到的,但是 key 值为 zhihu 的无法取到,会报 KeyError 的错。
KeyError: 'zhihu'
IndexError
索引错误,序列中没有此索引(index),索引超出序列范围时会报此错。
infos = ['official_accounts', 'Python知识圈', 'Bilibili', '菜鸟程序员的日常']
print(infos[5])
上面列表中有 4 个元素,索引最大是 3,因为索引从 0 开始,所以取索引为 5 的值时,会报 IndexError 的错。
IndexError: list index out of range
TypeError
类型错误,内建操作或是函数用于在了错误类型的对象时会引发类型错误。
class Ball:
def _init_(self, color, size, direction):
self.color = color
self.size = size
self.direction = direction
def bounce(self):
if self.direction == "down":
self.direction = "up"
myBall = Ball("red", "small", "down")
上面例子中,运行程序会报 TypeError 的错误,原因是构造函数 init 前后应该是双下划线 init ,上面写成了单下划线。
TypeError: object() takes no parameters
ZeroDivisonError:
除数为 0,在用除法操作时,第二个参数为 0 时引发了该错误。
a = 100
b = 0
c = a/b
print(c)
这个还好理解,除数为 0 了,会报这个错。
ZeroDivisionError: division by zero
上面举例讲了几个常见的异常场景,你只有读懂了这些报错信息,你才知道你的代码是哪里出了错。程序一旦出错,是一级一级往上报,控制台也能看到报错的具体行数。
对于程序项目中的异常,我们可能会对他进行 try except 异常处理,当然这是另一个主题需要分享的知识点,这里就不再赘述。
debug调试代码
如果没有明显的报错信息的话,比如我们经常做爬虫项目的时候,返回了一个空列表。这时我们就需要对代码进行 debug。小伙伴喜欢用 print 函数去打印主要的变量,有些直接用编辑器 Pycharm 里面的 debug 功能。
我们在需要调试的代码前单击,前面会显示红色实心圆,整行代码也会显示红色背景,也可以点击多行进行 debug,如下例子中,计算 1 到 100 相加之和,我在计算求和的代码处加了 debug,右键选择 Debug 选项调试代码。
代码运行到我们 debug 的地方时,会停下来,需要我们手动点击 Debugger 输出框里的 Step Over 按钮程序才会继续往下执行。
点击 Step Over 按钮执行时,对应的 Debug 处的后面还会显示对应变量的变量,便于我们查看执行过程。
面向谷歌编程
如果上面两步都尝试了,发现你还是没法解决问题,那可能是你有些知识点没掌握到,这时就是在搜索引擎中找找答案了,有名的技术问答社区 stackoverflow.com 或者发群里请教其他伙伴,空余时间把自己不会的知识点多看看,这样提升的速度会快一些。
总之,能快速找到问题所在,解决问题,总结问题,这样进步就很快了。
编程界要以和为贵,再见,朋友们!
关于Python学习指南
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
👉Python所有方向的学习路线👈
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python大厂面试资料👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
👉Python副业兼职路线&方法👈
学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。
👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费
】