程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的。

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学习笔记七-错误和异常的更多相关文章

  1. python学习笔记014——错误和异常

    Python有两种错误很容易辨认:语法错误和异常. 1 什么是语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 if i>4 print("if语句输出 ...

  2. Python学习笔记13—错误和异常

    常见的异常:

  3. Python学习 Part6:错误和异常

    Python学习 Part6:错误和异常 两种不同类型的错误:语法错误和异常 1. 语法错误 语法错误,也被称作解析错误: >>> while True print('Hello w ...

  4. Python 3 学习笔记之——错误和异常

    1. 语法错误 Python 的语法错误被称为解析错,语法分析器会指出出错的代码行,并且在最先找到的错误的位置标记一个小小的箭头. >>> while True File " ...

  5. python学习笔记(七)、异常

    在实际开发中,往往不会出现一个系统编写下来,没有出现任何一个bug.为处理这种会出现错误的地方,如除数为零的除法,python提供了非常强大的机制————异常处理机制. 1 异常 python使用异常 ...

  6. Python入门笔记(17):错误、异常

    一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序 ...

  7. python学习笔记七 初识socket(进阶篇)

    socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  8. Python学习笔记012_网络_异常

    1,Python如何访问互联网? url + lib =  urllib >>> # 使用urllib包下的request模块 >>> >>> i ...

  9. Python学习笔记七

    面向对象编程 面向对象的特性如下: 类:具有相同属性和方法的一类事物,成为类. 对象:类的实例化后的结果,一个类可以实例化多个对象,每个对象也可以不同的属性. 封装:在类中对数据的赋值,类里面包含着类 ...

随机推荐

  1. UVA138 Street Numbers(数论)

    题目链接. 题意: 找一个n,和一个m(m < n),求使得1~m的和等于m~n的和,找出10组m,n 分析: 列出来式子就是 m*(m+1)/2 = (n-m+1)*(m+n)/2 化简后为 ...

  2. -_-#【Better Code】字符串匹配

    提高 web 应用性能之 JavaScript 性能调优

  3. linux下svn修改用户名和密码

    1.临时更换,在命令下强制加上 --username 和--password选项, 例如:svn up --username zhangsan --password 123456 svn co URL ...

  4. 关于C#中Thread.Join()的一点理解

    原文地址:http://www.cnblogs.com/slikyn/articles/1525940.html 今天是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个 ...

  5. 解决nginx session共享的问题

    不使用session,换作cookie 能把session改成cookie,就能避开session的一些弊端,在从前看的一本J2EE的书上,也指明在集群系统中不能用session,否则惹出祸端来就不好 ...

  6. linux是一种修行

    或许我当初开始学习linux是因为我在了解嵌入式的时候,查到的资料,说linux是最好的系统,那时可能自己太嫩了,自己就信了,直到最近这几天我才被ubuntu折腾的要死,就是一个环境变量,我折腾怀了我 ...

  7. ASP.NET 之深入浅出Session和Cookie

    在做人事档案管理系统中,对于Session和Cookie的使用后理解更加深刻了,下面对本知识点总结学习. Session是什么? 简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有 ...

  8. Runtime.exec()

    关于RunTime类的介绍: /** * Every Java application has a single instance of class * <code>Runtime< ...

  9. java—— 调用系统命令

    调用所在环境的命令 链接:http://blog.csdn.net/yy6060/article/details/6311916 1 import java.io.*; 2 class Exec{ 3 ...

  10. 2013级C++第15周(春)项目——输入输出流及文件文件操作

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 本周程序阅读及程序调试中须要的文件,请到htt ...