百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python 中都有哪些常见的错误和异常?

off999 2024-11-19 08:35 51 浏览 0 评论

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!

作者| 慕课网精英讲师 朱广蔚

Python 程序的执行过程中,当发生错误时会引起一个事件,该事件被称为异常。例如:

  • 如果程序中有语法错误,会产生 SyntaxError 类型的异常
  • 执行除以 0 的运算,会产生 ZeroDivisionError 类型的异常
  • 打开一个不存在的文件,会产生 IOError 类型的异常

编程中常见的异常类型总结如下:

异常名称

描述

ZeroDivisionError

除(或取模)零

AssertionError

断言语句失败

AttributeError

对象没有这个属性

FileNotFoundError

文件不存在

ModuleNotFoundError

模块不存在

IndexError

序列中没有此索引(index)

KeyError

映射中没有这个键

NameError

未声明/初始化对象

SyntaxError

Python

IndentationError

缩进错误

1. ZeroDivisionError 的出现场景

进行除法运算时,要求被除数不能是 0,如果被除数是 0,则会产生异常,示例代码如下:

>>> 100 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
代码块1234
  • 在第 4 行,因为被除数是 0,产生 ZeroDivisionError 类型的异常

2. AssertionError 的出现场景

编写代码时,常常需要在某些特定的位置做出一些假设,假设某些条件为真,Python 使用 assert 语句假设指定条件为真:

assert 布尔表达式
代码块1

如果布尔表达式为真,assert 语句不做任何事情;如果布尔表达式为假,assert 语句抛出 AssertionError 类型的异常。

编写一个程序 AssertionError.py,功能是计算列表前 n 项元素之和:

def calcSum(list, n):
    assert n <= len(list)

    sum = 0
    for i in range(n):
        sum += list[i]
    print('sum = %d' % sum)

list = [11, 22, 33, 44]    
calcSum(list, 3)
calcSum(list, 5)
代码块1234567891011
  • 在第 1 行,calcSum 计算列表 list 的前 n 项之和
  • 在第 2 行,使用 assert 语句验证参数 n 是否小于等于 list 的长度正常情况下,n 是小于等于 list 的长度如果 n 大于 list 的长度,则表示输入参数 n 有错误
  • 在第 9 行,创建一个长度为 4 的列表在第 10 行,传递参数 n 等于 3,是一个合法的参数在第 11 行,传递参数 n 等于 5,是一个非法的参数

程序输出结果如下:

sum = 66
Traceback (most recent call last):
  File "AssertionError.py", line 11, in <module>
    calcSum(list, 5)
  File "AssertionError.py", line 2, in calcSum
    assert n <= len(list)
AssertionError
代码块1234567
  • 在第 1 行,输出 sum = 66calc(sum, 3) 计算列表前 3 项结果为 66
  • 在第 7 行,输出 AssertionErrorcalc(sum, 5) 计算列表前 5 项列表只有 4 项元素产生 AssertionError 类型的异常

3. AttributeError 的出现场景

Python 使用 object.property 的形式访问对象的属性,如果没有定义指定名称的属性,则会抛出 AttributeError 类型的异常。

编写程序 AttributeError.py,程序定义了类 Person,Person 包含有两个属性:name 和 age,代码如下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

tom = Person('tom', 10)
print(tom.name)
print(tom.age)
print(tom.address)     
代码块123456789
  • 在第 1 行,定义类 Person,Person 包含有两个属性:name 和 age;
  • 在第 6 行,实例化创建一个对象 tom;属性 name 为 ‘tom’;属性 age 为 10;
  • 在第 7 行,访问属性 name ;
  • 在第 8 行,访问属性 age;
  • 在第 9 行,访问属性 address,在类 Person 中没有定义该属性

程序输出结果如下:

tom
10
Traceback (most recent call last):
  File "AttributeError.py", line 9, in <module>
    print(tom.address)
AttributeError: 'Person' object has no attribute 'address'
代码块123456
  • 在第 1 行,输出属性 name 的值;
  • 在第 2 行,输出属性 age 的值;
  • 在第 1 行,属性 address 不存在,产生 AttributeError 类型的异常。

4. FileNotFoundError 的出现场景

python 使用函数 open(path) 打开指定路径的文件,如果文件不存在,则产生 FileNotFoundError 类型的异常,示例如下:

>> open('non-exist-file')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'non-exist-file'
代码块1234
  • 在第 4 行,因为文件 non-exist-file 不存在,产生 FileNotFoundError 类型的异常。

5. ModuleNotFoundError 的出现场景

python 使用关键字 import module_name 打开导入名称的模块,如果模块不存在,则产生 ModuleNotFoundError 类型的异常,示例如下:

>>> import non_exist_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'non_exist_module'
代码块1234
  • 在第 4 行,因为模块 non_exist_file 不存在,产生 ModuleNotFoundError 类型的异常

6. IndexError 的出现场景

在 Python 使用 list[index] 的形式访问列表 list 的指定位置的元素,要求 index:

  • 大于等于 0
  • 小于列表的长度

如果 index 不在合法范围,则产生 IndexError 类型的异常。

>>> list = ['www', 'imooc', 'com']
>>> list[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
代码块12345
  • 在第 1 行,创建长度为 3 的列表;合法的 index 是 0、1、2;
  • 在第 2 行,index 不在合法范围;在第 5 行,产生 IndexError 类型的异常。

7. NameError 的出现场景

Python 在读取变量时,要求变量必须已经定义。如果读取一个尚未定义的变量,会产生 NameError 类型的异常。

>>> variable = 123
>>> print(varible)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'varible' is not defined
代码块12345
  • 在第 1 行,创建变量 variable;
  • 在第 2 行,此处将 variable 错误的拼写成 varible;变量 varible 还没有创建;在第 5 行,产生 NameError 类型的异常。

8. SyntaxError 的出现场景

Python 程序中出现语法错误时,会产生 SyntaxError 类型的异常。编写程序 SyntaxError.py:

if 2>1
    print('2>1 is True')
    print('2>1 is False')
代码块123
  • 在第 1 行,有一处语法错误,在行尾缺少冒号 :

程序输出结果如下:

  File "SyntaxError.py", line 1
    if 2>1
         ^
SyntaxError: invalid syntax
代码块1234
  • 在第 1 行,File “SyntaxError.py”, line 1指明错误在文件 SyntaxError.py 中的第 1 行
  • 在第 4 行,产生 SyntaxError 类型的异常

9. IndentationError 的出现场景

Python 程序中出现缩进的语法错误时,会产生 IndentationError 类型的异常。编写程序 IndentationError.py:

if 2>1:
    print('2>1 is True')
  print('2>1 is False')
代码块123
  • 在第 2 行,缩进为 4 个空格
  • 在第 3 行,缩进为 2 个空格

程序输出结果如下:

  File "IndentationError.py", line 3
    print('2>1 is False')
                        ^
IndentationError: unindent does not match any outer indentation level
代码块1234
  • 在第 4 行,输出 IndentationError;源程序第 2 行的缩进为 2 个空格;源程序第 3 行的缩进为 4 个空格;两者不匹配,产生 IndentationError 类型的异常。

11. Python 的标准异常类型总结

在上面的小节中讲解了常见的异常类型,Python 中全部的标准的异常类型如下:

异常名称

描述

SystemExit

解释器请求退出

KeyboardInterrupt

用户中断执行(通常是输入^C)

Exception

常规错误的基类

StopIteration

迭代器没有更多的值

GeneratorExit

生成器(generator)发生异常来通知退出

StandardError

所有的内建标准异常的基类

ArithmeticError

所有数值计算错误的基类

FloatingPointError

浮点计算错误

OverflowError

数值运算超出最大限制

ZeroDivisionError

除(或取模)零

AssertionError

断言语句失败

AttributeError

对象没有这个属性

EOFError

没有内建输入,到达EOF

EnvironmentError

操作系统错误的基类

IOError

输入/输出操作失败

OSError

操作系统错误

WindowsError

系统调用失败

ImportError

导入模块/对象失败

LookupError

无效数据查询的基类

IndexError

序列中没有此索引(index)

KeyError

映射中没有这个键

MemoryError

内存溢出错误(对于Python

NameError

未声明/初始化对象

UnboundLocalError

访问未初始化的本地变量

ReferenceError

弱引用(Weak

RuntimeError

一般的运行时错误

NotImplementedError

尚未实现的方法

SyntaxError

Python

IndentationError

缩进错误

TabError

Tab

SystemError

一般的解释器系统错误

TypeError

对类型无效的操作

ValueError

传入无效的参数

UnicodeError

Unicode

UnicodeDecodeError

Unicode

UnicodeEncodeError

Unicode

UnicodeTranslateError

Unicode

DeprecationWarning

关于被弃用的特征的警告

FutureWarning

关于构造将来语义会有改变的警告

OverflowWarning

旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning

关于特性将会被废弃的警告

RuntimeWarning

可疑的运行时行为(runtime

SyntaxWarning

可疑的语法的警告

UserWarning

用户代码生成的警告

欢迎关注「慕课网」,发现更多IT圈优质内容,分享干货知识,帮助你成为更好的程序员!

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: