Python异常与错误处理详细讲解

 更新时间:2022年12月22日 11:28:49   作者:soapcmd  
这篇文章主要介绍了Python异常与错误处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

基础知识

优先使用异常捕获

LBYL(look before you leap): 在执行一个可能出错的操作时,先做一些关键的条件判断,仅当满足条件时才进行操作。

EAFP(eaiser to ask for forgiveness than permission): 不做事前检查,直接执行操作。

后者更优: 代码简洁,效率更高

try语句常用知识

把更精确的except语句放在前面

异常类派生关系: BaseException --> Exception --> LookupError --> KeyError

父类被捕获后子类就不会再被触发

使用else分支

try except else

else: 仅当try语句块里面没有抛出任何异常时,才执行else分支

和finally不同,假如在try语句块时碰到了return或者break, 中断了本次异常,那么即使代码没抛出任何异常,else分支内的逻辑也不会被执行

而finally里的语句,无论如何都会被执行,哪怕已经执行了return

使用空raise语句

>>> def incr_by_key(d, key):
...     try:
...         d[key] += 1
...     except KeyError:
...         print('here')
...         raise
...
>>> d = {'a': 1}
>>> incr_by_key(d, 'b')
here
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in incr_by_key
KeyError: 'b'
>>> d['c'] += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'

当一个空raise语句出现在except块里时,它会原封不动地重新抛出当前异常

抛出异常,而不是返回错误

使用上下文管理器

__enter__ __exit__

>>> class DummyContext:
...     def __init__(self, name):
...         self.name = name
...     def __enter__(self):
...         return f"{self.name} -- something"
...     def __exit__(self, exc_type, exc_val, exc_db):
...         print("Exiting")
...         return False
...
>>> with DummyContext('foo') as name:
...     print(f'Name: {name}')
...
Name: foo -- something
Exiting

用于替代finally 语句清理资源

__exit__里面清理资源。

此外__exit__也可以用来对异常进行二次处理然后抛出,或是忽略某种异常等等。

用户忽略异常

一般可以捕获异常后pass

但是也可以:

     def __exit__(self, exc_type, exc_val, exc_db):
         if exc_type == SomeException:
             return True
         return False

此外:使用contextlib里面的suppress也可以实现相同的功能

使用contextmanage装饰器

>>> @contextmanager
... def create_con_obj(host, port, timeout=None):
...     conn = create_conn(host, port, timeout=timeout)
...     try:
...         yield conn
...     finally:
...         conn.close()

yield前面的语句会在进入管理器时执行(类似:__enter__

之后的逻辑会在退出管理器时执行(类似:__exit__

到此这篇关于Python异常与错误处理详细讲解的文章就介绍到这了,更多相关Python异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python基础入门之seed()方法的使用

    Python基础入门之seed()方法的使用

    这篇文章主要介绍了Python基础入门之seed()方法的使用,是Python学习当中的基础知识,需要的朋友可以参考下
    2015-05-05
  • python深度优先搜索和广度优先搜索

    python深度优先搜索和广度优先搜索

    这篇文章主要介绍了python实现图的深度优先搜索和广度优先搜索相关知识点,对此有兴趣的朋友学习下。
    2018-02-02
  • 浅谈Python函数式编程的返回函数与匿名函数

    浅谈Python函数式编程的返回函数与匿名函数

    这篇文章主要介绍了浅谈Python函数式编程的返回函数与匿名函数,如果一个变量指向了一个函数,那么,可以通过该变量来调用这个函数,需要的朋友可以参考下
    2023-04-04
  • Python中Matplotlib图像添加标签的方法实现

    Python中Matplotlib图像添加标签的方法实现

    本文主要介绍了Python中Matplotlib图像添加标签的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 使用Python防止SQL注入攻击的实现示例

    使用Python防止SQL注入攻击的实现示例

    这篇文章主要介绍了使用Python防止SQL注入攻击的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Pycharm中import torch报错的快速解决方法

    Pycharm中import torch报错的快速解决方法

    这篇文章主要介绍了Pycharm中import torch报错的快速解决方法,很多朋友容易碰到这个问题,今天小编特此把解决方案分享到脚本之家平台供大家参考,需要的朋友可以参考下
    2020-03-03
  • Pandas多个条件(AND,OR,NOT)中提取行

    Pandas多个条件(AND,OR,NOT)中提取行

    本文主要介绍了Pandas多个条件(AND,OR,NOT)中提取行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python中多个装饰器的调用顺序详解

    python中多个装饰器的调用顺序详解

    这篇文章主要给大家介绍了关于python中多个装饰器的调用顺序,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • 使用Python实现 学生学籍管理系统

    使用Python实现 学生学籍管理系统

    这篇文章主要介绍了使用Python实现 学生学籍管理系统,代码大致分为五个函数组成,具体内容详情本文给大家介绍的非常详细,需要的朋友可以参考下
    2019-11-11
  • Python和Perl绘制中国北京跑步地图的方法

    Python和Perl绘制中国北京跑步地图的方法

    当你在一个城市,穿越大街小巷,跑步跑了几千公里之后,一个显而易见的想法是,我到底和之前比快了多少,跑量有何变化,如果能把在这个城市的所有路线全部画出来,会是怎样的景象呢,接下来通过本文给大家介绍Python和Perl绘制中国北京跑步地图的方法,需要的朋友参考下
    2016-03-03

最新评论