发生甚莫事了?我的程序为啥又报错了!

刚才有个小伙伴艾特我,我说发生甚么事了?给我发了几张截图,我一看,哦,原来是运行程序报错了。我说你不会看报错信息么,这不好用,他不服气,我说我教你们读懂报错信息,这个有用,这是化劲儿。

言归正传,运行程序出错或者没有出现我们想要的结果,我们每天都会遇到这样的问题,遇到问题没关系,重要的是我们知道怎么找出问题的根源,然后解决问题。

有报错信息

运行程序,啪,很快啊,控制台出现了报错信息,这时我们需要读懂报错信息,有些伙伴发到群里的报错信息很明显了,可是他却看不懂。所以 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%免费

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值