如何在Python中进行异常处理
作者:一只懐坏旭 发布时间:2021-02-21 06:51:01
一、抛出异常和自定义异常
Python中使用用异常对象(exception object)表示异常情况,当程序运行遇到错误后,就会触发发异常。相信大家在编码是都会遇到这种情况,那么如果异常对象并未被处理或捕捉,程序就会用报错然后终止执行。
1、raise语句
Python中的raise
关键字用于触发发一个异常,和我们熟悉的Java中的throw关键字相同,
如下所示:
>>> def ThorwErr():
>>> raise Exception("抛出一个异常")
>>> # Exception: 抛出一个异常
>>> ThorwErr()
如上raise
关键字后面是抛出是一个通用的异常类型(Exception),但是在实际编码中我们抛出的异常越详细越好。Python在exceptions
模块内建了很多的异常类型,我们用dir函数来查看exceptions中都有哪些的异常类型,
如下:
>>> import exceptions
>>> print dir(exceptions)
传递异常:
捕捉到了异常,要想重新引发它(传递异常),我们可以使用不带参数的raise语句:
>>> class MuffledCalculator:
>>> muffled = False
>>> def calc(self,expr):
>>> try:
>>> return eval(expr)
>>> except ZeroDivisionError:
>>> if self.muffled:
>>> print 'Division by zero is illegal'
>>> else:
>>> raise
2、自定义异常类型
在Python
中我们也可以定义自己的特殊异常类型,只需要继承Exception
类即可,这里的继承既可以是直接继承,也可以是间接继承。
>>> class selfExceptions(Exception):
>>> pass
二、捕捉异常
和java
中的try/catch
相似,在Python中使用try/except捕捉异常
try:
print 2/0
except ZeroDivisionError:
print '除数不能为0'
1、捕捉多个异常
使用except
语句时我们只能捕捉其后声明了的那个异常类型,如果代码可能会抛出的是其他类型的异常,这时就需要再增加一个except语句了,
如下:
try:
print 2/'0'
except ZeroDivisionError:
print '除数不能为0'
except Exception:
print '其他类型异常'
为了捕获多个异常,除了声明多个except语句之外,还可以在一个except语句之后将多个异常作为元组列出来即可:
try:
print 2/'0'
except (ZeroDivisionError,Exception):
print '发生了一个异常'
2、获取异常信息
每个异常都会有一些异常信息,我们可以把这些异常打印出来查看,便于修改代码:
try:
print 2/'0'
except (ZeroDivisionError,Exception) as e:
# unsupported operand type(s) for /: 'int' and 'str'
print e
三、finally子句
和Java
中一样,finally不管try子句内部是否有异常发生,都会执行finally
子句内的代码。一般使用时,finally常常使用用于关闭文件或者在Socket
中。
try:
print 2/'0'
except (ZeroDivisionError,Exception):
print '发生了一个异常'
finally:
print '不管是否发生异常都执行'
来源:https://blog.csdn.net/qq_45691220/article/details/123307366


猜你喜欢
- 本文实例为大家分享了js实现选项卡效果的具体代码,供大家参考,具体内容如下<!DOCTYPE html><html>
- 二叉树中和为某一值的路径:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直
- 首先,让我们介绍一下什么是pytorch,它是一个基于Python的开源深度学习框架,它提供了两个核心功能:张量计算和自动求导。张量计算张量
- 本文实例讲述了Golang编程实现删除字符串中出现次数最少字符的方法。分享给大家供大家参考,具体如下:描述:实现删除字符串中出现次数最少的字
- python 获取蓝牙设备类型扫描蓝牙设备获取到的信息中,无法判断扫描到的蓝牙设备属于什么类型的设备。扫描蓝牙信息使用的是python 里面
- 在go语言的源码中,会发现很多,代码只有函数签名,却看不到函数体,如:// src/os/proc.go 68行func runtime_b
- 问题:连续或者单个窗体,如何打印当前显示的记录?当前窗体还有对应的子窗体,也要一起打印出来我在一个窗体里有一个单号,大子窗体里有几组数据,我
- 在本文上两篇中,我们学习了脚本语言 VBScript 的变量、函数、过程和条件语句,本篇将继续给大家介绍 VBScipt 的循环语句,并对脚
- pandas.read_sql 可以在数据库中执行指定的SQL语句查询或对指定的整张表进行查询,以DataFrame 的类型返回查询结果,这
- 公司客户在使用网站后台编辑添加修改内容时,经常是直接从word文档里复制内容到编辑器里后就提交。结果是在内容显示页面上是五花八门的样式,有时
- 1、 引言小 * 丝:鱼哥,新年快乐!小鱼:无事不登三宝殿,有啥事,你直说吧…小 * 丝:别说的这么直接,这大过年的&
- 当使用SqlDataSource控件选择数据时,可以从两个属性:ConnectionString和SelectCommand开始,如下所示:
- PHP addAttribute() 函数实例给根元素和 body 元素添加一个属性:<?php $note=<<<
- 目录一、善用组件让代码更有条理性1、 提取UI组件2、按模块提取业务组件3、按功能提取功能组件二、利用v-bind使组件的属性更具有可读性三
- 本文实例讲述了Python数组定义方法。分享给大家供大家参考,具体如下:Python中没有数组的数据结构,但列表很像数组,如:a=[0,1,
- JS 控制文本框只能输入数字<input onkeyup="value=value.replace(/[^0-9]/g,
- 1 计算属性实现模糊查询vue 中通过计算属性实现模糊查询,创建 html 文件,代码直接放入即可。这里自己导入 vue,我是导入本地已经下
- 本文用到的文件的下载地址百度网盘链接: https://pan.baidu.com/s/1tmpdEfAZKff5TOMAitUXqQ提取码
- 它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi
- 在平时的工作中,难免需要一些 小Tip 来解决工作中遇到的问题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx