python基础-异常(exception)处理
python基础-异常(exception)处理
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
程序中难免出现错误,而错误分成两种,即语法错误和逻辑错误。语法错误根本过不了python解释器的语法检测,必须在程序执行前就改正,还有一种就是逻辑错误,对逻辑错误的处理是本篇博客介绍的重点。
一.什么是异常
1>.python解释器检测到错误,触发异常(也允许程序员自己触发异常);
2>.程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关);
3>.如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理;
二.为什么要处理异常
python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性 .
三.如何进行异常处理
首先须知,异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正.
1>.常见的异常
#以下是常见的逻辑异常,注意,语法错误不算是逻辑异常哟!
#1>. NameError,即变量错误,没有定义就被调用了,案例展示如下:
# a
#2>. TypeError,即类型错误,传入的数据类型应该是一个迭代器,案例展示如下:
# sum(1,2,3)
#3>.KeyError,上面定义的字典是空的,但是你还得去取值,当然啥也取不出来啦!不得不抛出异常,案例展示如下:
# dic = {}
# dic["key"]
#4>.IndexError,索引错误,在列表中不存在对应的下标就会爆出异常,案例展示如下:
# array = []
# array[1]
#5>.StopIteration,迭代器的对象遍历完毕之后会跑出的异常,案例展示如下:
# array = [1,2]
# array_iterator = iter(array)
# next(array_iterator)
# next(array_iterator)
# next(array_iterator)
#6>.ValueError:,即传值错误,要求你传入数字,结果你传入的是字母,案例展示如下:
# number = input("num:")
# int(number)
2>.单分支异常处理
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com try:
number = input("Your number:>>>").strip()
number = int(number)
print("您输入的数字是:%d" % number)
except ValueError:
print("请输入一个整数!")
'''
放在try中的代码如果遇到except中的错误类型,就会执行except的代码且一旦发生异常,try中的代码会停止在异常处,
但不影响try语句之外的代码执行。一种错误类型只能处理对应的一种错误,其它错误还照样报错。
'''
3>.多分支异常处理
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com try:
number = input("Your number:>>>").strip()
number = int(number)
print("您输入的数字是:%d" % number)
a
sum(1,2,3)
except ValueError:
print("请输入一个整数!")
except NameError as name_error:
print("产生了一个%s"%name_error)
except TypeError:
print("咋又诞生了一个错误呢!")
4>.万能异常处理
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com try:
number = input("Your number:>>>").strip()
number = int(number)
print("您输入的数字是:%d" % number)
a
sum(1,2,3)
except Exception as err:
print("你的程序异常啦!%s"%err) """
对于你已经可以遇见的但是不能完全规避的必须要处理的异常,你应该去制定他的处理方式,对于其它你不能预料的,在使用万能异常处理。
"""
5>.异常处理的else语句
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com try:
a = 1
except NameError as err:
print(err)
else:
print("当try语句中不会发生异常的时候执行else中的代码啦!")
6>.异常处理之finally语句
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com def func():
try:
f = open('yinzhengjie.java')
int(f.read())
print("*********开始关闭文件啦!") #代码并不会被执行
f.close()
print("文件已经被关闭啦**********")
except ValueError as err:
return -1
else:
print("以上代码没有异常") #try代码块中没有异常的时候才会被执行,finally代码块中代码永远执行。
finally:
print("开始关闭文件啦!")
f.close()
print("文件已经被关闭啦") '''
finally关键字:
不管程序遇到何种的异常,或是中途return啦,最终finally的代码都会被执行哟!一般用于清理工作,即把之前打开的链接,
文件等资源都关掉,避免因为程序异常造成的浪费资源和逻辑问题。
''' print(func())
7>.主动触发异常
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com try:
raise ValueError #主动触发异常!
except ValueError:
print("Error")
8>.断言
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com assert 1 == 1 print("正确执行") assert 1 == 2 #一言不合就报错!只要这个条件不满足就抛出异常!断言一般用于在一个功能的最开始 print("错误执行")
四.什么时候用异常处理
其实异常处理我是不建议大家用它的,try....except语句应该尽量少用,因为他本身就是你附加给程序的一个异常处理的逻辑,与你的主要的工作是没有关系的,这种东西加的多了,会导致你的代码可读性变差,只有在有些异常无法预知的情况下,才应该加上try...except,其它的逻辑错误应该尽量修正。
python基础-异常(exception)处理的更多相关文章
- Python中异常(Exception)的总结
Python中的异常处理 异常处理的语句结构 try: <statements> #运行try语句块,并试图捕获异常 except <name1>: <statement ...
- python基础-异常和模块
异常的定义 #encoding=utf-8 import sys try: 1/0 print "never executed!" except ZeroDivisionError ...
- python基础--异常,对象和迭代器
异常处理 面向对象 迭代器和生成器 python异常处理 下面代码触发了一个FileNotFoundError >>> open("notexist.txt") ...
- python基础-----异常问题
---恢复内容开始--- 当发生python不知所措的错误时,python会创建一个异常对象, 如果你编写处理该异常的代码,程序将会继续运行: 如果你未对异常做任何处理,程序将会停止,并显示一个tra ...
- Python基础——异常
捕捉所有异常 for i in range(10): try: input_number=input('write a number') if input_number=='q': break res ...
- 【原】Python基础-异常
def cacls(x, y): try: return x/y except ZeroDivisionError: print("y can not be zerp") exce ...
- Python基础-异常
异常捕获 常见异常类型 Exception:顶级异常类,大部分异常类都是它的子类.SyntaxError:语法错误TypeError:类型错误ValueError:值错误NameError:找不到名称 ...
- Python基础学习笔记(十三)异常
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-exceptions.html Python用异常对象(excep ...
- 十九. Python基础(19)--异常
十九. Python基础(19)--异常 1 ● 捕获异常 if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <............. ...
随机推荐
- Daily Scrumming* 2015.11.1(Day 13)
一.今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 实现API小的更改 实现前后端整合 杨墨犁 实现首页 修改首页 付帅 实现创建编辑登录登出 测试修改 ...
- OO的第一次死亡
久仰OO大名,总是想着提前做点准备,其实到头来还是什么准备都没有做,所以这学期就是从零开始的面向对象生活,也因此遇到了很多的问题. 第一次作业——多项式加减 第一次作业历来是较为简单的,但是对于面向对 ...
- python接口测试之requests库(一)
一.requests库的安装 requests库作为第三方库,需要安装 cmd模式下,运行pip install requests 二.在学习如何发送请求之前,我们先来了解一下requests库,查看 ...
- 第二次作业<2>
自学计划 应为对网络的教程并不了解,所以-- 我扒了一遍同学的博客,找到了两个课程. 慕课网 和 这个. 选择这两个教程主要是深入浅出,比较合理. 开始先两个课程相互应证,多了解以后可能会选择一个.虽 ...
- 剑指offer :跳台阶
这题之前刷leetcode也遇到过,感觉是跟斐波拉契差不多的题. 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 解 ...
- DPDK网卡绑定
进入DPDK目录编译环境 # cd ~/DPDK/usertools # ./dpdk-setup.py 注意,setup脚本需要在root权限下运行,并且每次重启电脑,都需要重新插入模块和绑定网卡. ...
- String 类 常用函数
构造方法摘要: String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String. String(char[] value) ...
- 关于Keil C关键字xdata和data的问题
1.xdata表示这是一个外部RAM地址内的数据,数据最终将被保存至外部RAM的某个地址单元中:但是,外部RAM只能通过寄存器间接寻址来访问,也就是说,其地址需要保存在内部RAM中(其实或许是SFR中 ...
- 监控MySQL服务器主从同步异常的脚本,出现异常,报警
监控主从复制的指标有: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 (从服务器与主服务器延时多少秒) # ...
- docker删除为<none>的镜像
$ docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }') //停止容器 $ docker rm ...