文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python中的异常类型及处理方式示例详解

2024-04-02 19:55

关注

前言

Python 是一种面向对象的、解释型的、通用的、开源的脚本编程语言。现在市面上 Python 非常的流行,主要是因为它简单易用,学习成本低,比如要实现某个功能,Python 可能只需要几行代码,而用C语言可能需要上百行代码,因为C语言什么都要得从头开始编码,而 Python 已经内置了很多功能模块,所以,我们只需要导入特定的包,就可以实现想要的效果。

正文

今天,我们主要来了解一下 Python 中的异常类型以及它们的处理方式。说到异常处理,我们首先要知道什么是异常。其实,异常就是一类事件,当它们发生时,会影响到程序的正常执行。

一、什么是异常

其实,异常就是一类事件,当此类事件在程序执行过程中发生时,就会影响程序的正常执行。一般情况下,在 Python 无法正常处理程序时就会发生一个异常,而异常是 Python 的一种对象类型,用来表示一个错误。当 Python 脚本发生异常时我们需要捕获并处理它,否则程序就会终止。

二、异常的类型

Python 中定义了一些标准的异常类型,具体的异常名称和对应的实际意义,我们可以通过下面的表格来了解。

异常名称 描述
BaseException 所有异常的基类
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 reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError Python 语法错误
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

其实,在上述表格中列出的异常中,也具备一定的层次关系,我们可以通过下图来了解一下。

三、异常处理

在实际开发过程中,我们需要写出健壮性的程序,不希望我们的程序在执行过程中遇到了异常就自动终止。因此,我们需要处理程序执行过程中的异常事件,从而保证程序不会因为发生异常而终止。在编码过程中,我们可以简单使用 try/except 语句来捕捉异常,具体语法如下:


try:
<语句>        # 运行别的代码
except 异常类型:
<语句>        # 如果在try部份引发了异常
else:
<语句>        # 如果没有异常发生

熟悉 Java 的小伙伴都知道,在 Java 中是通过 try...catch 语句来捕获代码中的异常事件的,在 Python 中使用什么呢?

其实,在 Python 中是使用 try...except 语句用来捕获异常,通过监视 try 语句块中的错误,从而让 except 语句捕获异常信息并进行处理。

因此,如果你不想在异常发生时结束你的程序,就需要在 try 语句块中捕获相应的异常。

接下来,我们通过一个代码实例来具体了解一下 try...except 的用法。

代码实例:


#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
try:
    fh = open("test.txt", "r")
    fh.write("这是一个测试文件,用于测试Python中的异常!")
except IOError:
    print "Error: 写入文件失败"
else:
    print "内容写入文件成功"
    fh.close()

上述代码的意思是以可读模式打开一个 test.txt 文件,然后向文件中写入一段话:这是一个测试文件,用于测试Python中的异常! 因为文件是以可读模式打开的,所以没有写入权限,肯定会出错,但是因为是在 try 代码块中,肯定会被对应的IO错误类型捕获,并输入提示信息:Error:写入文件失败。

运行结果:

然后,我们修改代码,以写模式打开文件再写入对应的语句,修改后代码如下:


#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
try:
    fh = open("test.txt", "w")
    fh.write("这是一个测试文件,用于测试Python中的异常!")
except IOError:
    print "Error: 写入文件失败"
else:
    print "内容写入文件成功"
    fh.close()

这时,我们发现文件能够正常写入内容了,并且不会触发异常事件发生。

运行结果:

四、try 介绍

try 的工作原理是,当开始一个 try 语句后,python 就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try 子句先执行,接下来会发生什么依赖于执行时是否出现异常。大致的情况可以分为两种,一种是触发了异常,另一种是没有触发异常,具体表现如下:

1. 如果当 try 后的代码里发生了异常,python 就跳回到 try 并执行第一个匹配该异常的 except 子句,异常处理完毕,控制流就通过整个 try 语句。

2. 如果在 try 后的代码里没有发生异常,python将执行else语句后的语句,然后控制流通过整个try语句。

其实,上面的代码实例很好的覆盖了这两种情况。

五、finally 介绍

finally 语句块中的内容,无论程序是否发生了异常都执行。这一点和 Java 是类似的,具体我们来看一段代码:


#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
try:
    fh = open("test.txt", "r")
    fh.write("这是一个测试文件,用于测试Python中的异常!")
except IOError:
    print "Error: 写入文件失败"
else:
    print "内容写入文件成功"
    fh.close()
finally:
    print "异常发生了,执行finally代码块"

上述代码在原来的基础上增加了 finally 代码块,发生了异常,依然会执行 finally 代码块。同样,即使没有触发异常,也会执行相应的 finally 代码块。感兴趣的小伙伴可以自己动手试一下,这里就不演示了。

运行结果:

六、raise 介绍

在 Java 中,我们可以使用 throw 语句主动抛出异常,那么在 Python 中,是否也有类似的关键字呢?答案是肯定的。接下来,我们就来了解一下 raise 关键字。在编码过程中,我们可以使用 raise 语句主动触发异常。具体的语法可以参考如下格式:


raise [Exception [, args [, traceback]]]

需要注意的是语句中 Exception 是异常的类型(例如,IOError、OSError),参数标准异常中任意一种,参数 args 是自已提供的异常参数。最后一个参数 trackback 是可选的,一般为空。

实例代码:


#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
try:
    fh = open("test.txt", "w")
    fh.write("这是一个测试文件,用于测试Python中的异常!")
except IOError:
    print "Error: 写入文件失败"
else:
    print "内容写入文件成功"
    try:
	print "抛出自定义异常"
    	raise Exception("这是一个自定义异常事件")
    except:
	print "自定义异常事件被捕获"
    fh.close()
 
finally:
    print "自定义异常发生了,执行finally代码块"

运行结果:

结尾

好了,今天关于 Python 的介绍就到这里吧,本文主要分享了 Python 中的异常类型以及异常发生时的处理方法,Python 简单易用,感兴趣的小伙可以自己试试呦!

到此这篇关于Python中的异常类型及处理方式的文章就介绍到这了,更多相关Python异常类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯