前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础学习 Python 之错误 & 异常

零基础学习 Python 之错误 & 异常

作者头像
编程文青李狗蛋
发布2019-11-07 15:44:03
5440
发布2019-11-07 15:44:03
举报
本文字数:1211 字 阅读本文大概需要:4 分钟

写在之前

从今天开始一个新的篇章又要开始了,这次要写的「错误 & 异常」知识点比较少,不像「类」那样知识点那么多,所以稍微好过一点。

对于程序在执行过程中因为错误或者其它原因而中止的现象,我们在之前文章的代码中已经看过很多次了,那些都可以归为「错误 & 异常」现象,我们接下来就是要对这种现象进行近距离的观察和处理。

错误

其实不管是弱鸡还是大佬,在写代码的时候错误往往是难以避免的,可能是因为手残,也可能是因为拼写错误,当然还有可能是某些比较玄学的错误,比如逗号写成全角的等等等等。总之,写代码中有相当一部分工作就是要不停的修改错误。

Python 中的错误之一就是「语法错误」(Syntax Errors),比如:

代码语言:javascript
复制
>>> for i in range(5)
  File "<stdin>", line 1
    for i in range(5)
                    ^
SyntaxError: invalid syntax

上面的那行代码里因为缺少冒号,导致解释器无法解释,于是报错,这个报错其实是 Python 的语法分析器完成的,并检测到了错误所在的文件和行号( File "<stdin>", line 1 ),还以向上的箭头 ^ 标识错误的位置,最后显示错误类型。

另一种错误就是我们常说的「逻辑错误」,逻辑错误可能是由不合法或者不完整的输入导致的,也可能是无法计算等,或者是其它的逻辑问题。逻辑错误不是由 Python 来检查的,所以此处我们所谈的错误不包括逻辑错误。

异常

当 Python 检测到一个错误时,解释器就无法继续执行下去,于是就抛出提示信息,即为「异常」。有错误时,程序运行过程就会出现异常,让我们先来看一个小例子:

代码语言:javascript
复制
>>> 10 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

当 Python 抛出异常的时候,首先有「跟踪记录」或者叫「回溯」,后面显示异常的详细信息,包括异常所在的位置,最后一行是异常类型及导致异常的原因。在上面的例子中,明确的告诉我们异常的类型是 ZeroDivisionError,并且对此异常类型做了解释。

异常的类型有很多,我在这说几个常见的类型:

代码语言:javascript
复制
NameError
尝试访问一个没有申明的变量

ZeroDivisionError
除数为零

SyntaxError
语法错误

IndexError
索引超出序列范围

KeyError
请求一个不存在的字典关键字

IOError
输入/输出错误

AttributeError
尝试访问未知的对象属性

为了能够更好的深入理解,我在这举几个例子,展示一下其中几个异常出现的条件和结果:

1.NameError

代码语言:javascript
复制
>>> rocky
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'rocky' is not defined

在 Python 中虽然不需要在使用变量之前声明类型,但也需要对变量进行赋值,然后才可以使用,不被赋值的变量不能在 Python 中存在,因为变量相当于一个便签,要把它贴到对象上才有意义。

2.IndexError & KeyError

代码语言:javascript
复制
>>> a = [1,2,3]
>>> a[4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

>>> b = {'name':'rocky'}
>>> b['age']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'age'

这两个用我们俗语来说就是「鸡蛋里挑骨头」,一定得报错了,不过在实际编程的时候,特别是循环的时候,常常由于循环条件设置的不合理从而出现这种类型的错误。

3.IOError

代码语言:javascript
复制
>>> f = open('test')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'test'

如果你确认有文件,就一定要把路径写正确,因为你并没有告诉 Python 要对你的计算机进行全身搜查,所以 Python 会按照你指定的未知去找,找不到就会出现异常。

这里只是干说其实没有什么效果,具体的还是要在实际编程中碰到才会印象深刻,这里你先把常见的几个记住,到时候别出现问题的时候不知道是什么错误。

写在最后

当你在运行程序的时候遇到异常时,不要慌张,这个其实是好事情,是 Python 在帮助你修改错误。只要你认真的阅读异常信息,再用我们之前学过的 dir(),help() 或官方文档,搜索工具等来协助,就一定会解决问题。

问题出现了就要解决,明天我们继续来说如何去「处理异常」,敬请期待。

如果你觉得本篇文章对你有帮助的话,欢迎点赞转发,让更多的人看到,在这现行谢过了。

The end。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档