Python中的异常处理相关语句基础学习笔记
作者:linda1000 发布时间:2021-10-18 00:54:50
异常是指因为程序出现了错误而在正常控制流以外采取的行动,其分为两个阶段,第一阶段是引发异常的错误,当系统检测到错误并且意识到异常条件,解释器(也可以是程序员引发异常)会引发一个异常通知前段控制流有错误发生,对异常的处理发生在第二阶段,异常引发后,可以调用很多不同的操作,可以是忽略错误,或是记录错误但不采取任何措施,采取补救措施后终止程序,或是 * 问题的影响后设法继续执行程序
类似Python这样支持引发和处理异常的语言,可以让开发人员在错误发生时不仅有检测错误的能力,还可以采取更可靠的补救措施。
Python用异常对象(exception object)来表示异常情况,遇到错误后,引发的异常如果未被处理或捕捉,程序会自动调用回溯(Traceback)终止执行
>>> 1/0
Traceback (most recent call last):
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
>>>
python中的异常
python解释器检测的异常如:
1) NameError: 尝试访问一个未声明的变量
2)ZeroDivisionError: 除数为零
3)SyntaxError:Python语法错误
4)IndexError: 请求的索引超出序列范围
5)KeyError:请求一个不存在的字典关键字
6)IOError: 输入/输出错误
7)AttirbuteError: 尝试访问未知的对象属性
8)TypeError:在内建操作或者函数 应用于错误类型的对象时引发
9)ValueError: 在内建操作或者函数 应用于正确类型的对象,但对该对象引用不合适的值引发
由程序员明确触发异常:
raise语句:
raise [someException [, args [, traceback]]]
检测和处理异常
异常可以通过try语句来检测,主要有两种实现形式:try-except 和 try-finally:
try-except 语句
定义了进行异常监控的一段代码,并提供了处理异常的机制
try:
try_suite #进行监控的代码
except Exception[, reason]:
except_suite #异常处理的代码
[except Exception2[, reson2]:
except_suite2 # 处理try语句中可能发生的多种异常
[else:
else_suite #try中语句执行没有异常被检测到
[finally:
finally_suite #无论如何均会执行]]]
try-finally语句
finally方式的语句并不是用来捕捉异常,而是用来维持一致的行为而无论异常是否发生,无论try中是否有异常触发,finally代码段都会被执行
try:
try:
try_suite
except:
excetp_suite
finally:
finally_suite
等效于:
try:
try_suite
except:
excetp_suite
finally:
finally_suite
Assert
Python中assert的运用于C语言中的assert()函数相似,
主要功能在于确保程序中的某个条件一定为真时,才能让程序执行,否则终止程序执行并触发AssertionError错误
其可以视为相对高级点的异常处理
语法:
assert expression1, expression2
(不用小括号)
其中,expression1 表示程序继续执行的判断条件,为真则继续,为假则程序终止,并抛出expression2给出的描述信息
>>> a=10
>>> assert a<=10, "Error"
>>> a = 11
>>> assert a<=10, "Error"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: Error
等价于:
if a>10: raise AssertionError("Error")
说明:
assert语句一般用于程序编写过程中的调试,将其添加到Python源代码中后,未避免影响编译性能,
建议尽量去除assert语句,并将__debug__这个内置变量设置为False,即在运行命令行中添加参数
python -0 test.py
(这其实与C语言中的编译参数-d类似)
猜你喜欢
- 在IE7还不支持counter 和increment 属性之前,我从来没有用过它们,也从来没有使用过:before 伪元素和content
- 本文实例为大家分享了Virginia无密钥解密的具体代码,供大家参考,具体内容如下加密virginia加密是一种多表替换加密方法,通过这种方
- 使用 Microsoft® SQL Server™ 2000,可以选择在一台计算机上安装 SQL Ser
- __init__()方法意义重大的原因有两个。第一个原因是在对象生命周期中初始化是最重要的一步;每个对象必须正确初始化后才能正常工作。第二个
- 这个格式是我自创的,经常有人问我为什么,这里做个简单总结:1、分类,一个模块或者同类功能定义为一类定义,每类定义之间用段落隔开。2、分级,每
- 桥接模式(Bridge Pattern)是什么桥接模式是一种结构型模式,它将抽象部分与实现部分分离开来,使它们可以独立地变化。在桥接模式中,
- 分享一下 在3est活动中学习的godlong的 代码如下:<% Set xPost = createObject("Mi
- 看代码吧~import numpy as npa = np.array([[2, 4, 6, 1], [1, 5, 2, 9]])print
- 在电子产品的设计中,大家经常提到简洁是设计的重要元素。可是很多产品,不见得简洁就是第一要素。简洁的设计,必须是在对用户需求透彻理解,引导用户
- 相对于 Ajax,服务端 XMLHTTP 就是在服务端使用 XMLHttpRequest 对象了。虽然说,在服务端使用异步请求是比较不方便的
- 超酷的js图片轮换/轮播 渐变效果··来自腾讯刚刚在腾讯女性频道上看到一个很酷的图片渐变轮换效果·····于是乎····抠下来了···分享·
- 通常程序会被编写为一个顺序执行并完成一个独立任务的代码。如果没有特别的需求,最好总是这样写代码,因为这种类型的程序通常很容易写,也很容易维护
- 在默认情况下,MySQL搜索不区分大小写(但某些字符集始终区分大小写,如czech)。这意味着,如果你使用col_name LIKE
- 在进行浮动布局时,大多数人都深知,在必要的地方进行浮动清理:<div style="clear:both;">
- 十个免费的web前端开发工具网络技术发展迅速,部分技术难以保持每年都有新的工具出现,这同时也意味着许多旧的工具倒在了新技术的发展之路上。前端
- 代码#!/usr/bin/env python#coding=utf-8import random#生成[0, 1)直接随机浮点数print
- 以下测试用于去除任何字符串中连线的分隔符 代码如下:--去除字符串中连续的分隔符 declare @str nvarchar(200) de
- 如何远程注册DLL?试试下面的代码:<% Response.Buffer = True %&g
- WinHttp; // Microsoft WinHTTP Services, version 5.1Alias HTTPREQUEST_P
- 爬取结果:爬取代码import osimport jsonimport requestsfrom tqdm import tqdmdef l