如何在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

标签:Python,异常,处理
0
投稿

猜你喜欢

  • Python实现随机划分图片数据集的示例代码

    2021-08-01 16:35:32
  • python调用staf自动化框架的方法

    2021-11-03 17:47:43
  • 详解Python中表达式i += x与i = i + x是否等价

    2023-07-29 06:51:12
  • Python根据欧拉角求旋转矩阵的实例

    2022-09-03 15:11:00
  • Oracle数据库快照的使用

    2010-07-28 13:32:00
  • python根据路径导入模块的方法

    2021-10-23 14:27:38
  • Python 的矩阵传播机制Broadcasting和矩阵运算

    2021-07-28 01:03:34
  • 通过事务日志解决SQL Server常见四大故障(二)

    2009-03-25 13:51:00
  • 磁盘垃圾文件清理器python代码实现

    2023-08-24 23:20:41
  • 不同操作系统下的mysql数据库同步

    2008-12-22 14:41:00
  • Python游戏开发之Pygame使用的最全教程分享

    2021-01-11 05:45:55
  • 打败 IE 的葵花宝典:CSS Bug Table

    2010-08-03 12:30:00
  • python爬取酷狗音乐排行榜

    2021-01-24 19:43:49
  • python对gif图压缩的完美解决方案

    2021-06-19 03:09:00
  • PHP5.6读写excel表格文件操作示例

    2023-11-21 15:03:21
  • 在Tensorflow中查看权重的实现

    2022-05-02 20:14:56
  • pandas数据预处理之dataframe的groupby操作方法

    2022-07-07 19:27:56
  • python 算法题——快乐数的多种解法

    2021-12-25 06:32:43
  • Python笔记之工厂模式

    2022-11-07 17:58:47
  • 让复杂导航设计变得简单

    2008-01-07 11:50:00
  • asp之家 网络编程 m.aspxhome.com