python下的异常处理
一、什么是异常
程序运行过程中错误发生的信号。(如果运行时产生的异常,程序不处理就会被抛出,随之会造成程序终止)
二、异常的种类
首先,异常主要分为语法错误、逻辑错误两种类型
语法错误会在程序还没有执行前就会被检测出,所以针对语法错误,我们就要在程序执行前解决掉。
# 语法错误示范:
if def foo
pass class Bar:
pass
逻辑错误只有在程序执行过程中会被检测,不处理会就会被抛出,导致程序终止。
# 逻辑错误示范:
l=[11,22,33]
l[4]
xxx
d = {'a': 1, 'b': 2}
d['z']
我们常见的逻辑错误类型有哪些??
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError 常见的语法错误
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
三、异常处理
既然有异常发生,那我们就要设法捕捉异常,不能因为异常而导致程序的终止。
如果我们能预知错误的发生条件时,那我们就应该用if判断去处理,在异常发生之前先进行预防。
num = input('请输入数字>>:').strip() if num.isdigit(): # 我们知道只有在num为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
num = int(num) num += 1
print(num)
如果我们无法预知错误发生的条件时,则需要用到try...except:在错误发生之后进行处理。
try:
print('===1')
l = [1, 2, 3]
l[11]
print('====3')
d = {'a': 1, 'b': 2}
d['z']
print('===5')
except IndexError:
print('没有执行"l[11]"下面的代码')
except KeyError:
print('KeyError') else:
print('放在最后执行,前提是try内的代码没有异常发生,才会执行else') finally:
print('finally放在最后执行,无论try内的代码有没有异常发生都会执行')
print('你好啊') # ===1
# 没有执行"l[11]"下面的代码
# finally放在最后执行,无论try内的代码有没有异常发生都会执行
# 你好啊
当我们不知道会发生的错误类型时,就需要用到万能异常捕获!!
try:
code1
code2
code3
code4 except Exception as e:
print(e)
class EgonException(BaseException):
def __init__(self,msg):
self.msg=msg def __str__(self):
return self.msg try:
raise EgonException('类型错误')
except EgonException as e:
print(e)
自定义异常类
主动产生异常:raise的用法
# raise 一般用于自定义程序的控制逻辑或系统资源被无限占用时
class People:
def __init__(self,name,age):
self.__name = name
self.__age =age def set_inter(self,name,age):
# 控制用户的修改格式
if not isinstance(name,str):
raise TypeError('name must be str')
if not isinstance(age,int):
raise TypeError('age must be int')
self.__name = name
self.__age = age obj = People('jack',12)
obj.set_inter('peter',25)
print(obj.__dict__) # {'_People__name': 'peter', '_People__age': 25}
python下的异常处理的更多相关文章
- python下异常处理
1.python下异常如何处理: #encoding=utf-8 """ python遇到异常,程序直接运行 try: "判断有可能抛出异常的代码" ...
- Python 基础之 异常处理
python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理? 先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...
- Python基础---python中的异常处理
Python中的异常处理 一.什么是异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) ...
- [Python Study Notes]异常处理
正则表达式 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理 断言(Assertions) python标准异常 ...
- Python系列之 - 异常处理
python提供的异常处理 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常 ...
- Python异常和异常处理
Python异常和异常处理2017年12月20日 22:17:08 Megustas_JJC 阅读数:114 标签: python 异常处理 更多 个人分类: Python 版权声明:本文为博主原创文 ...
- python中的异常处理机制
python中的异常处理 1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异 ...
- Python 入门 之 异常处理
Python 入门 之 异常处理 1.异常处理 (1)程序中的错误分为两种 <1> 语法错误 (这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范 ...
- python面向对象07/异常处理
python面向对象07/异常处理 目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 ...
随机推荐
- AWT的应用
AWT(Abstract Window TookIT)是java用于创建用户界面和绘制图形的所有类 AWT组件和容器 AWT包含了很多类和接口,用于java Application的GUI(图形用户界 ...
- @deprecated 的方法处理
因为需要用到poi,偷懒不太想看官方文档,同时自己的github账号忘记密码了.所以直接在别人博客那拷贝一段代码来模仿修改创建HSSF的xsl文件. 虽然能运行,但发现代码太多横线,可以知道方法被标注 ...
- SqlServer如何判断字段中是否含有汉字?
--/* --unicode编码范围: --汉字:[0x4e00,0x9fa5](或十进制[19968,40869]) --数字:[0x30,0x39](或十进制[48, 57]) --小写字母:[0 ...
- Shell命令-文件及内容处理之head、tail
文件及内容处理 - head.tail 1. head:显示文件内容头部 head命令的功能说明 head 命令用于显示文件头部内容,默认执行 head 命令会输出文件开头的 10 行. head命令 ...
- Package与Activity简介
Package Package 包.只是在我们的app中这个Package是唯一的,就像你身份证号码一样.在我们做app自动化时,我们就需要知道他的Package,我们知道了Package那么也就知道 ...
- JAVA String类型和原型模式
如上例所述,变量a,b和它们的值10,20都是存在栈里面,声明的所以String类型的引用也都是存在栈里.而字符串abc是存在字符串常量池中,new出来的String对象则是存在堆里. String ...
- 第六十六天 js操作高级
1.对象使用的高级 对象的key为字符类型,value为任意类型 var obj ={ name:"name", "person-age":18 } // 访问 ...
- win+R启动列表
屌丝才用windows,无奈~ """ Win+R 快速启动的命令: 系统应用程序: calc - 启动计算器 charmap - 启动字符映射表 chkdsk - Ch ...
- 20175209 《Java程序设计》第三周学习总结
20175209 <Java程序设计>第三周学习总结 教材学习内容总结 第四章知识点 1.发展阶段: 面向机器——面向过程——面向对象(特点:封装性,继承性,多态性) 2.类: 类 声明变 ...
- Vue过滤器
局部定义: var vm = new Vue({ el:"#app", data:{ proData:'' }, filters: { pro_color(index){ swit ...