Python学习笔记七-错误和异常
程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的。
7.1错误和异常
1、错误
从软件方面来看,错误分为语法错误和逻辑错误两种。这两种错误都将导致程序无法正常进行下去,当Python检测到一个错误时就出现了异常。
2、异常
当编译器检测到错误并且意识到错误条件。解释器会引发一个异常(程序员也可以自己引发一个异常,后面会说到)。
以下是7种Python中常见的错误。
1、NameError,尝试访问一个未申明的例子。
2、ZeroDivisionError,零除错误。
3、SynataxError,解释器语法错误。
4、IndexError,请求的索引超出范围。
5、KeyError,请求一个不存在的字典Key。
6、IOError,输入输出错误,例如尝试打开一个不存在的文件。
7、AttributeError,尝试访问 为未知的对象属性。
7.2异常检测和异常处理
7.2.1 try-excep语句
try:
FileTest=open('blash','r')
except IOError,e:
print 'could not open file'
此时当发生输入输出错误的时候程序不会停止,而是捕获异常显示预先定义的字符串。需要注意的是只有当捕获IOError时会执行print语句,当发生其他类型的异常时程序仍会停止,此时我们我们可能需要带多个except的try语句。
7.2.2带有多个except的try语句
可以将多个except语句连起来,如下所示
except Exception1[,reason1]:
suit_for_exception1
except Exception2[,reason2]:
sut_for_exception2
程序执行时未发生错误忽略所有except语句,如果发生异常则在多个except语句中查找匹配的异常。这样开发时既能捕获多种类型异常,帮助我们处理错误。
7.2.3捕获所有异常
根据上面带多个except的语句可以捕获多种异常,但事实上程序总会发生我们意想不到的异常,所有如果可以捕获所有异常而不仅限于我们指定的异常那么对开发将有比较大的帮助。
但是捕获所有所有异常有个缺陷,就是它不会告诉你到底捕获了什么异常,也无法让你应对不同类型的异常。
它的用法是:
try: except (KeyboardInterrupt,SystemExit):
#user wants quit
raise
except Exception:
#handle real Errors
需要解释的是KeyboardInterrupt,SystemExit并不是真正意义上的异常,前者是用户按下Ctrl+C后者表示程序需要退出,所以想要程序正常退出时不被捕获异常需要上面的代码。
7.2.4获取异常原因
捕获异常后只有得到异常发生的原因才能帮助我们改进。
except语句的使用:
except exception[,reason]
括号中的reason即是异常的原因,异常参数。异常参数可以忽略,如果需要访问异常的原因那么reason则是必须的。reason是包含导致异常的代码的诊断信息的类实例,虽然从异常的名字就可以获知发生了何种异常,但是reason将提供更多的异常信息。
用法如下:
def safe_float(object):
try:
retval=float(object)
except (ValueError,TypeError),reason:
retval=str(reason)
return retval print safe_float('xyz')
程序将显示could not convert string to float: xyz,是的编译器返回了具体的错误原因。
7.2.5 else 语句
我们已经见过if-else,while-else语句,try-except-else当然也是可以使用的,其意义是在try范围内没有异常检查到则执行else语句。
7.2.6 finally语句
try-except-finally中的finally子句表示无论是否捕获到异常都将执行的一段代码。当然"try-except-else-finally"也是完全可以搭配的。很简单不在多说,需要注意的是except语句可以有不止一个,但是至少要有一个。else和finally都是可选的。
7.3异常触发
7.3.1 raise语句
有时我们可能需要引发一个异常,此时需要raise语句。使用如下:
raise [SomeException[,args[,traceback]]]
第一个参数SomeException是必要的,你需要提供要引发的异常名。第二个参数args是将参数传递给异常;第三个参数是用于异常-正常化(exception-narmally)的跟踪记录(traceback)记录。当程序运行到raise语句时会跳出并引发你需要的异常。
7.4断言
7.4.1 断言可以理解为(raise if not...)当布尔值为假时抛出异常。断言关键字为assert,用法如下:
assert expression[,arguments]
表达式后面是我们提供的异常参数。
Python学习笔记七-错误和异常的更多相关文章
- python学习笔记014——错误和异常
Python有两种错误很容易辨认:语法错误和异常. 1 什么是语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 if i>4 print("if语句输出 ...
- Python学习笔记13—错误和异常
常见的异常:
- Python学习 Part6:错误和异常
Python学习 Part6:错误和异常 两种不同类型的错误:语法错误和异常 1. 语法错误 语法错误,也被称作解析错误: >>> while True print('Hello w ...
- Python 3 学习笔记之——错误和异常
1. 语法错误 Python 的语法错误被称为解析错,语法分析器会指出出错的代码行,并且在最先找到的错误的位置标记一个小小的箭头. >>> while True File " ...
- python学习笔记(七)、异常
在实际开发中,往往不会出现一个系统编写下来,没有出现任何一个bug.为处理这种会出现错误的地方,如除数为零的除法,python提供了非常强大的机制————异常处理机制. 1 异常 python使用异常 ...
- Python入门笔记(17):错误、异常
一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序 ...
- python学习笔记七 初识socket(进阶篇)
socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- Python学习笔记012_网络_异常
1,Python如何访问互联网? url + lib = urllib >>> # 使用urllib包下的request模块 >>> >>> i ...
- Python学习笔记七
面向对象编程 面向对象的特性如下: 类:具有相同属性和方法的一类事物,成为类. 对象:类的实例化后的结果,一个类可以实例化多个对象,每个对象也可以不同的属性. 封装:在类中对数据的赋值,类里面包含着类 ...
随机推荐
- PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理 相对于linux来说,udev还是一个新事物.然而,尽管它03年才出现,尽管它很低调(J),但它无 ...
- COJN 0558 800600带通配符的字符串匹配
800600带通配符的字符串匹配 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 通配符是一类键盘字符,当我们不知道真正字符或者 ...
- 动态树LCT
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> usin ...
- Delphi 写日志的类
unit uProgLog; interface uses Windows, SysUtils, SyncObjs; const C_LOG_LEVEL_TRACE = $; C_LOG_LEVEL_ ...
- HDOJ 1014 Uniform Generator(公约数问题)
Problem Description Computer simulations often require random numbers. One way to generate pseudo-ra ...
- Socket的协议地址属性
首先列举所需要的头文件 #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #in ...
- python模块管理
参考python的模块管理,请看如下 http://blog.sina.com.cn/s/blog_90bc5fc6010159e0.html http://hi.baidu.com/billsche ...
- hadoop 运行 datanode , mac 系统
问题描述 今天使用 hadoop 时,发现无法通过下面命令上传文件到 hadoop 文件系统,会报错. bin/hadoop fs -put input . 运行 jps 后,输出如下: Resour ...
- Windows 已在 DImageProcess.exe 中触发一个断点。
其原因可能是堆被损坏,这说明 DImageProcess.exe 中或它所加载的任何 DLL 中有 Bug. 原因也可能是用户在 DImageProcess.exe 具有焦点时按下了 F12. 输出窗 ...
- XML (DOM解析) 看看就行
000000000000000000000000000000000000000 ------------------------------------------------------------ ...