iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python学习笔记总结(四):异常处理
  • 172
分享到

Python学习笔记总结(四):异常处理

学习笔记异常Python 2023-01-31 02:01:53 172人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

一、异常基础 1、基础 try/except/else:【else是可选的】捕捉由代码中的异常并恢复,匹配except里面的错误,并执行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不

一、异常基础
1、基础
try/except/else:【else是可选的】捕捉由代码中的异常并恢复,匹配except里面的错误,并执行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行try语句后面的程序)
try首行底下的代码块代表此语句的主要动作:试着执行的程序代码。except分句定义try代码块内引发的异常处理器,而else分句(如果有)则是提供没有发生异常时候要执行的处理器。
try/finally: 无论异常是否发生,都执行清理行为 (发生异常时程序会中断程序,只不过会执行finally后的代码)
raise: 手动在代码中接触发异常。
assert: 有条件地在程序代码中触发异常。 assert几乎都是用来收集用户定义的约束条件
with/as 在python2.6和后续版本中实现环境管理器。
用户定义的异常要写成类的实例,而不是字符串、。
finally可以和except和else分句出现在相同的try语句内、
扩展
try/except/finally
可以在同一个try语句内混合except和finally分句:finally一定回执行,无论是否有异常引发,而且不也不管异常是否被except分句捕捉到。finally有没有异常都执行
try/except/else:
except捕捉到对应的异常才执行。else 没有异常才执行、
也就是说except分句会捕捉try代码块执行时所有发生的任何异常,而else分句只在try代码执行没有发生异常时才执行,finally分句无法释放发生异常都执行。
2、try语句分句形式
分句形式            说明
except:                捕捉所有(其他)异常类型
except name:        只捕捉特定的异常
except name,value:    捕捉所有的异常和其额外的数据(或实例)
except (name1,name2) 捕捉任何列出的异常
except (name1,name2),value: 捕捉任何列出的异常,并取得其额外数据
else:                如果没有引发异常,就运行
finally:            总是会运行此代码块,无论是否发生异常
空的except分句会捕捉任何程序执行时所引发的而未被捕捉到的异常。要取得发生的实际异常,可以从内置的
sys模块取出sys.exc_info函数的调用结果。这会返回一个元组,而元组之前两个元素会自动包含当前异常的名称,
以及相关的额外数据(如果有)。就基于类的异常而言,这两个元素分别对应的是异常的类以及引发类的实例。
sys.exc_info结果是获得最近引发的异常更好的方式。如果没有处理器正在处理,就返回包含了三个None值的元组。
否则,将会返回(type,value和traceback)
*type是正在处理的异常的异常类型(一个基于类的异常的类对象)
*value是异常参数(它的关联值或raise的第二个参数,如果异常类型为类对象,就一定是类实例)
*traceback是一个traceback对象,代表异常最初发生时所调用的堆栈。
3、try/else分句
不要将else中的代码放入try:中。保证except处理器只会因为包装在try中代码真正的失败而执行,而不是为else中的情况行为失败而执行。
else分句,让逻辑封明确
4、try/finally分句
Python先运行try: 下的代码块:
如果try代码块运行时没有异常发生,Python会跳至finally代码块。然后整个try语句后继续执行下去。
如果try代码块运行时有发生异常,Python依然会回来运行finally代码块,但是接着会把异常向上传递到较高的try语句或顶层的默认处理器。程序不会在try语句继续执行。
        try:
                Uppercase(open('/etc/rc.conf'),output).process()
        finally:
                open('/etc/rc.conf').close
5、统一try/except/finally分句
2.5版本后可统一(包括2.5版本)
try:
    main-action:
except Exception1:
    hander1
except Exception2:
    hander2
...
else:
    else-block
finally:
    finally-block
这语句中main-action代码会先执行。如果该程序代码(main-action)引发异常,那么except代码块都会逐一测试,寻找与抛出的异常相符的语句。如果引发异常
的是Exception1则会执行hander1代码块,如果引发异常的是Exception2,则会执行hander2代码块。以此类推。如果没有引发异常,将会执行else-block代码块。
无论前面发生什么,当main-action代码块完成时。finally-block都会执行。
6、通过嵌套合并except和finally
try:
    try:
        main-action:
    except Exception1:
        hander1
    except Exception2:
        hander2
    ...
    else:
        else-block
finally:
    finally-block
和5的效果一样
7、raise语句
要故意触发异常,可以使用raise语句。raise语句组成是: raise关键字,后面跟着要引发的异常名称(选用),以及一个可选的额外的数据项,后可随着异常传递
raise <name>
raise <name>,<data>
raise
第二种形式随着异常传递额外的数据项,在raise语句中,数据是列在异常名称的后面的;在try语句中,取得该数据是通过引入一个进行接收
它的变量实现的。例如,如果try引入一个exceptname,X:语句,则变量X就会被赋值为raise内所列出的额外的数据项,如果没有定义默认接受到
的就是特殊对象None。一旦被程序中任意的except分句捕捉,异常就死了(也就是说,不会传递给另一个try),除非又被另一个raise语句或
错误所引发。现在用户定义的异常应该是类实例对象。
8、assert语句
assert可以有条件地在程序代码中触发异常,可以认为是有条件的raise.
牢记:assert几乎都是用来收集用户定义的约束条件,而不是捕捉内在的程序设计错误。因为Python会自动收集程序的设计错误,通常没有必要写
assert去捕捉超出索引值,类型不匹配以及除数为0之类的事
该语句形式:
assert  <test>,<data>
实例
>>> def f(x):
...     assert x>0,'x must be great zerot'
...     return x**2

二、异常对象
Python2.5版本 字符串异常会产生'deprecation‘(不建议使用)’警告。python3.0将不再支持字符串异常,python2.7版本已经不再支持。
所有的异常都是基于类的异常,字符串异常已退出历史舞台。
1、基于类的异常
sys.exc_info() 一种抓取最近发生异常的常用方式。
对基于类的异常而言,其结果中第一个元素就是引发异常类,而第二个是实际引发的实例。
注意:目前Python的说明文件指出,用户定义的异常最好继承自Exception内置的异常(但不是必须要求)
在try语句中,捕捉其超类就会捕捉这个类,以及类树中超类下的所有子类:超类会变成异常分类的名称,而子类会变成该分类中特定的
异常类型。使用异常的超类,这样子类也捕捉到,可以在未来增加函数异常(在子类里),而不影响程序。
Python2.5以后版本将每个异常都写成类(必须),从异常树顶层继承Exception(非必须)。
基本原则是:在异常处理器中,通常来说具体要优于一般。
2、内置Exception类
Python把内置异常组织成层次,来支持各种捕捉模式
Exception:    异常的顶层根超类
StandardError:    所有内置错误异常的超类
ArithmeticError:    所有数值错误的超类
OverflowError:    识别特定的数值错误的子类
可以在Python库手册或exceptionsn模块的帮助文本中查阅。
>>> import exceptions
>>> help(exceptions)
3、定义异常文本
对基于类的异常而言,其结果中第一个元素就是引发异常类,而第二个是实际引发的实例
>>> raise MyBad():
>>> raise MyBad()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.MyBad: <__main__.MyBad instance at 0x2850d26c>
这样的显示不友好。改进显示,可以在类中定义__repr__或__str__显示字符串重载方法,从而返回异常达到想要默认处理器显示字符串。
>>> class MyBad():                        
...     def __repr__(self):               
...             return "Sorry--my mistake!"
...
>>> raise MyBad()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.MyBad: Sorry--my mistake
这样把显示类的实例改为了我们定义的文本。
注意:如果继承自内置异常类,错误测试会有细微的改变,构造方法参数会自动存储并显示在消息中。【同样也可以把继承的重载】
>>> class MyBad(Exception):pass
... >>> raise MyBad()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.MyBad
>>> raise MyBad('the','bright','side','of')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.MyBad: ('the', 'bright', 'side', 'of')
4、发送额外数据和实例行为
把环境信息附加在基于类的异常的办法是:在引发的实例对象中填写实例的属性,通常是在类的构造器方法中。在异常处理器中,是列出
要赋值为引发的实例的变量,然后通过这个变量名来读取附加的转改信息,并且调用任何基础的类方法。【很强大的功能】
>>> class FORMatError:
...     def __init__(self,line,file):
...             self.line=line
...             self.file=file
>>> def parser():
...     raise FormatError(42,file='diege.txt') #手动定义异常,基于类的异常,类构造函数传递两个数据。
...
>>> try:
...     parser()
... except FormatError,X: #定义接受异常(类的实例-异常引发时产生的实例)传递过来数据的变量。
...     print 'Error at',X.file,X.line #显示实例传递过来的数据
...
Error at diege.txt 42
5、raise的一般形式
raise string #基于字符串的异常,已过时
raise string,data #基于字符串的异常,已过时
raise instance    #最常用的模式,直接接一个实例:raise FormatError(42,file='diege.txt')
raise class,instance
raise
为了和内置异常为字符串的的旧版兼容,也可以
raise class #same as :raise class()
raise class,arg # same as :raise class(arg)
raise clase(arg1,arg2,...) #same as:raise class(arg1,arg2...)
这些都相当于raise class(arg),等效于raise instance形式
>>> def parse():
...     raise FormatError,(42,'diege.txt')

三、异常的设计
1、嵌套异常处理器
把内部的try写成函数来嵌套
使用语法嵌套
2、异常的习惯用户
1)异常不总是错误
3、核心语言总结
一般而言,Python提供了一个有层次的工具集。
内置工具:
像字符串,列表和字典这些内置类型,会让编写程序更为迅速。
Python扩展:
就更重要的任务来说,可以编写自己的函数,模块以及类来扩展Python
已编译的扩展:
Python的工具箱类型。
分类        例子
对象类型    列表,字典,文件和字符串
函数        len,range,apply,open
异常        IdexError,KeyError
模块        os,TKinter,pickle,re
属性        __dict__,__name__,__class__
外部工具    NumPY,SWIG,Jython,IronPython
 

--结束END--

本文标题: Python学习笔记总结(四):异常处理

本文链接: https://www.lsjlt.com/news/186273.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Python学习笔记总结(四):异常处理
    一、异常基础 1、基础 try/except/else:【else是可选的】捕捉由代码中的异常并恢复,匹配except里面的错误,并执行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不...
    99+
    2023-01-31
    学习笔记 异常 Python
  • Python学习笔记9——异常处理
    就看这篇博客吧:一篇搞定所有的异常处理,讲的很详细。 异常 Python中各种异常也是类,类Exception继承自类BaseException,还有其他各种异常等等,此外,通过继承BaseException或者Exception可以自定...
    99+
    2023-01-30
    学习笔记 异常 Python
  • Python学习笔记整理(十七)异常处理
    一、异常基础 try/except:捕捉由代码中的异常并恢复,匹配except里面的错误,并自行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行try语句后面的程序) ...
    99+
    2023-01-31
    学习笔记 异常 Python
  • Python学习笔记四(Python
    Python os模块提供了一个统一的操作系统接口函数,通过python os模块可以实现对系统本身的命令,文件,目录进行操作,官方参考文档( http://docs.python.org/library/os)。1)os.sep 可以...
    99+
    2023-01-31
    学习笔记 Python
  • Python学习笔记整理(四)Pytho
    字符串是一个有序的字符集合,用于存储和表现基于文本的信息。 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3="""...""" 三重引号块 T4=r'...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • C++学习笔记之浅谈异常处理
    异常处理主要是针对能通过编译但是运行是在某个特定条件下会出现异常,程序崩溃,结果出错。来进行的东西 C++处理异常的机制是由3个部分组成的,即检查(try)、抛出(throw)和捕捉...
    99+
    2024-04-02
  • 【JAVA学习笔记】47 - 异常,try-catch处理,throw处理
    项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter12/scr/com/yinhai/exception_ 〇、异常处理的引入 程...
    99+
    2023-10-27
    java 学习 笔记
  • Python学习笔记(四)——数字
    数字 在Python中,数字并不是一个真正的对象类型,而是一组类似类型的分类。Python不仅支持通常的数据类型(整数和浮点数。),而且能够通过常量去直接创建数字以及处理数字的表达式。  整数和浮点数 复数 固定精度的十进...
    99+
    2023-01-31
    学习笔记 数字 Python
  • python学习总结四(python数字
      一简介 数字 提供了标量贮存和直接访问。他是不可改类型。也就是数字的值变化时是生成了 新的对象。 1 如何创建数字和赋值。(数字对象) a = 1 就这么简单。 2 如何更新数字 因为单独数字不能做为变量,改变他的值。“3+5” 实际上...
    99+
    2023-01-31
    数字 python
  • PHP学习笔记:异常处理与错误调试
    在编写PHP代码的过程中,难免会遇到各种错误和异常。良好的异常处理和错误调试能够帮助我们更好地定位问题和修复bug,提高代码的可靠性和稳定性。本文将介绍PHP中的异常处理和错误调试的具体方法,并给出相关的代码示例。一、异常处理异常的概念在程...
    99+
    2023-10-21
    错误调试 异常处理 关键词:PHP
  • Python学习 :异常处理
      异常处理   什么是异常处理   - python解释器检测到错误,触发异常(也允许程序员自己触发了异常)   - 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,只与异常处理有关)   - 如果捕捉成功则进入另外...
    99+
    2023-01-30
    异常 Python
  • Python常见异常处理总结
    目录异常处理介绍语法报错异常处理解决方法抛出异常自定义异常其他内置函数总结异常处理介绍 在实际的开发中,我们经常遇到一些报错的例子,在pycharm的显示页面下,当我们看到一串串的红...
    99+
    2024-04-02
  • Python 3 学习笔记:异常代码调试
    什么是异常 程序运行过程中,产生的错误统称为异常(bug)。这些异常有的可能是语法错误,如关键字输入错误、调用错误等,这一类的异常都是显式的,很好发现;还有一种就是隐式的错误,只用在使用时才会被发现,和使用者的操作有关。 下面介绍一下 Py...
    99+
    2023-01-31
    学习笔记 异常 代码
  • Python 自然语言处理学习笔记:编程算法实践总结?
    Python 自然语言处理学习笔记:编程算法实践总结 自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,它的目标是让计算机能够像人一样理解和处理自然语言。Python 是一种广泛...
    99+
    2023-11-14
    自然语言处理 编程算法 学习笔记
  • python学习之异常处理
    一、语法导致的异常,应该在程序运行前处理 例子: print( 输出: File "E:/python/oldboyday9/learn1.py", line 4     if      ^ SyntaxError: invalid sy...
    99+
    2023-01-31
    异常 python
  • python学习笔记(三)-表单处理
    表单类 默认情况下,Flask-WTF能保护所有表单免受跨站请求伪造攻击(CSRF) app = Flask(__name__) # 强制性必须填写secret_key app.config['SECRET_KEY'] = 'h...
    99+
    2023-01-31
    表单 学习笔记 python
  • python学习笔记(3) -- 常用数
    1.数字类型python的数字类型分为 ×××、长整型、浮点型、布尔型、复数型。(python没有字符类型)整型: ×××可以用 二进制、八进制、十六进制表示 默认是十进制。除十进制外其他三种需要加前缀:二进制(0b)、八进制(0o)、...
    99+
    2023-01-31
    学习笔记 常用 python
  • Python 学习笔记中如何处理 path?
    Python 学习笔记中如何处理 path? 在 Python 编程中,我们经常需要处理文件路径。Python 提供了许多内置模块,使我们能够轻松地处理路径和文件。在本文中,我们将介绍处理路径的方法,并提供一些示例代码。 os 模块 P...
    99+
    2023-08-02
    学习笔记 path 大数据
  • Python异常及处理方法总结
    调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需要根据异常Traceback到出错点,进行分析改正;另一方面,有些异常是不可避免的,但我们可以对异常进行捕获处理,防止程序终...
    99+
    2023-01-31
    异常 方法 Python
  • Python基础异常处理梳理总结
    目录前言一、常见的Python异常AssertionError:断言语句(assert)失败AttributeError:尝试访问未知的对象属性IndexError:索引超出序列的范...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作