如何在Python中进行异常处理

 更新时间:2022年03月07日 11:45:37   作者:一只懐坏旭  
这篇文章主要介绍了如何在Python中进行异常处理,Python中使用用异常对象(exception object)表示异常情况,当程序运行遇到错误后,就会触发发异常,下文关于异常处理的相关内容,需要的小伙伴可以参考一下

一、抛出异常和自定义异常

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 '不管是否发生异常都执行'

到此这篇关于如何在Python中进行异常处理的文章就介绍到这了,更多相关Python中进行异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现简单神经网络算法

    python实现简单神经网络算法

    这篇文章主要为大家详细介绍了python实现简单神经网络算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • matplotlib.pyplot.plot()参数使用详解

    matplotlib.pyplot.plot()参数使用详解

    这篇文章主要介绍了matplotlib.pyplot.plot()参数详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • python中文分词教程之前向最大正向匹配算法详解

    python中文分词教程之前向最大正向匹配算法详解

    中文分词是中文文本处理的一个基础性工作,然而长久以来,在Python编程领域,一直缺少高准确率、高效率的分词组件。下面这篇文章主要给大家介绍了关于python中文分词教程之前向最大正向匹配算法的相关资料,需要的朋友可以参考下。
    2017-11-11
  • matplotlib相关系统目录获取方式小结

    matplotlib相关系统目录获取方式小结

    这篇文章主要介绍了matplotlib相关系统目录获取方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Pandas实现批量拆分与合并Excel的示例代码

    Pandas实现批量拆分与合并Excel的示例代码

    这篇文章主要为大家详细讲讲如何利用python Pandas实现批量拆分与合并Excel,文中有非常详细的的代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2022-05-05
  • Python中super的用法实例

    Python中super的用法实例

    这篇文章主要介绍了Python中super的用法实例,本文对比了普通继承和super继承的相关内容,从运行结果上看,普通继承和super继承是一样的,但是其实它们的内部运行机制不一样,这一点在多重继承时体现得很明显,需要的朋友可以参考下
    2015-05-05
  • 利用Fn.py库在Python中进行函数式编程

    利用Fn.py库在Python中进行函数式编程

    这篇文章主要介绍了利用Fn.py库在Python中进行函数式编程,基于Scala中的类似风格,需要的朋友可以参考下
    2015-04-04
  • 总结Python函数参数的六种类型

    总结Python函数参数的六种类型

    这篇文章主要总结了Python函数参数的六种类型,传递参数实现不同场景的灵活使用,下面总结的六种函数参数类型,需要的小伙伴可以参考一下
    2022-03-03
  • PyQt5+serial模块实现一个串口小工具

    PyQt5+serial模块实现一个串口小工具

    这篇文章主要为大家详细介绍了如何利用PyQt5和serial模块实现一个简单的串口小工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-01-01
  • 深入理解 Python 中的多线程 新手必看

    深入理解 Python 中的多线程 新手必看

    你应当将下边的例子运行多次,以便可以注意到线程是不可预测的和线程每次运行出的不同结果。声明:从这里开始忘掉你听到过的关于GIL的东西,因为GIL不会影响到我想要展示的东西
    2016-11-11

最新评论