我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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异常内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

JAVA异常与异常处理详解

一、异常简介什么是异常?异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域的情况,称之为异常。java中异常的体系是怎么样的呢?(推荐:java视频教程)1.Java中的所有不正常类都继承于Throwable类。Throwab
JAVA异常与异常处理详解
2020-06-12

详解JS中异常与错误处理的正确方法

这篇文章主要和大家分享了一些JavaScript中异常与错误处理的正确方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以参考一下
2023-05-16

Python异常处理详解

在shell脚本中,常用if来判断程序的某个部分是否可能会出错,并在if的分支中做出对应的处理,从而让程序更具健壮性。if判断是异常处理的一种方式,所有语言都通用。对于特性完整的编程语言来说,都有专门的异常处理机制,有些语言用起来可能会很复
2023-01-30

Golang错误处理方式异常与error

我们在使用Golang时,不可避免会遇到异常情况的处理,与Java、Python等语言不同的是,Go中并没有try...catch...这样的语句块,这个时候我们如何才能更好的处理异常呢?本文来教你正确方法
2023-01-14

Ruby在Linux中处理异常与错误

在Ruby中,异常和错误是通过Exception类来表示的要在Ruby中处理异常,你可以使用begin、rescue、ensure和raise关键字。下面是一个简单的例子:begin# 这里放可能引发异常的代码result = 1 /
Ruby在Linux中处理异常与错误
2024-09-10

php常见的错误与异常处理方法

本篇内容介绍了“php常见的错误与异常处理方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php与其他计算机编程语言在遇到错误就抛出异常不
2023-06-02

RUST异步流处理方法详细讲解

这篇文章主要介绍了RUST异步流处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-12-16

详解C++中的异常和错误处理机制

在C++编程中,异常处理和错误处理机制是非常重要的,它们可以帮助程序员有效地处理运行时错误和异常情况,本文就来介绍一下C++中的异常处理和错误处理机制吧
2023-05-19

php7中异常与错误的处理方法

这篇文章将为大家详细讲解有关php7中异常与错误的处理方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。异常与错误的概述什么叫做异常?异常是指程序运行中不符合预期情况以及与正常流程不同的状况。比如你链接数
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录