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: <............. ...
随机推荐
- 面向对象OO第9-11次作业总结
面向对象OO第9-11次作业总结 1.关于规格化设计的调研程序规格说明:对程序所应满足的要求,以可验证的方式作出完全.精确陈述的文件.“规格说明”一词与其他工业产品的“规格说明书”有相似的含义.不过, ...
- Linux 基础入门第一次实验笔记
第一节.实验介绍 本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识.如果你已经有过充分的了解,可以跳过本节,直接进入下一个实验. 一.Linux 为何物 Linux ...
- 关于map和hashmap
今天做的程序猿那题 在公司里面,程序猿经常有一堆todolist要做,而这些todolist是产品经理分配给他们的.但是当程序员遇到不懂技术的产品狗时,就悲剧了.产品经理经常修改他们的todolist ...
- Hive与Hbase的区别
1. 两者分别是什么? Apache Hive是一个构建在Hadoop基础设施之上的数据仓库.通过Hive可以使用HQL语言查询存放在HDFS上的数据.HQL是一种类SQL语言,这种语言最终被 ...
- synchronized、锁、多线程同步的原理是咋样
先综述个结论: 一般说的synchronized用来做多线程同步功能,其实synchronized只是提供多线程互斥,而对象的wait()和notify()方法才提供线程的同步功能. 一般说synch ...
- beta发布简评
第一组:新蜂小组 题目:俄罗斯方块 评论:主体功能已经完成,可以流畅的进行游戏,无论效果或是功能都实现的很好. 第二组:Nice团队 题目:约跑APP(约吧) 评论:作为应用,想法创意很好:功能实现上 ...
- sql server数据库中raiserror函数的用法
server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误.这个错误可以被程序捕捉到. raiserror的常用格式如下:ra ...
- 通达OA工作流主要表的数据结构
flow_run_prcs 流程执行明细 字段名称 类型 中文 说明 RUN_ID 数值 流水号(关键字段) 每发起一个工作流,即创建一个全局唯一的流水号 PRCS_ID 数值 执行步骤序号 USER ...
- java 基础 --概念--005
1,面向对象特征 封装(encapsulation):隐藏对象的属相和访问细节,仅提供对外公共访问方式.继承(inheritance).多态(polymorphism) 2,类:一组相关的属性和行为的 ...
- Qt4程序在windows平台下打包发布
一.打包成绿色版 将源码编译成release版,运行*.exe文件,提示缺少*.dll,在Qt安装目录中找到相应的dll文件(一般在bin目录下),将dll文件复制到exe文件目录下即可. 二.打包成 ...