在继续sketch.txt文本时,会发生另外一种错误:
错误信息是: need more than 1 value to unpack, 也就是说需要1个值以上才可以分割,继而想到是不是文本里面有的行的内容是没有分号分割的。
经检查看到:
有两行的内容是只有一部分,没有冒号分割,即每行都是(pause),这么来解决这种问题呢??
下面引入了2种方法来解决问题:
1.是添加额外的逻辑判断
2.是写完code直接运行,若程序有问题会给于反馈,trackback,然后根据trackback的提示去修复程序
对于第一种处理异常的方法,我们需要做的是先判断什么样的行是需要进行分割的,也就是要判断每一行是否有冒号,有几个冒号。
对于第二种处理异常的方法,则是不去避免错误,直接让错误发生,然后在出现错误的地方进行修复。
下面来看一下第一个处理异常方法的实例:
实例:建立了一个txt文本文件里面的内容为:
我们把每行的内容分成两部分,角色和说的话:
代码为:
输出的结果为:
在程序中的两个判断语句的作用是相同的,都是如果找到冒号则进行分割,在找冒号的过程中我们用到了find()函数,下面来解析一下这个函数。
find函数的原型是:find(被查找的字符,查找的首字母位置(下标默认从0开始),查找的末尾位置(不包括末尾位置,下标默认为-1))
find函数的返回值是:if查询到此字符则返回到第一次出现此字符的位置。if没有查到此字符,则返回到-1
对比一下程序执行正常代码和异常代码的流程:
由此引入try...except语句,try用来捕获由python或者程序本身引发的异常,except用来处理异常。
except后面可以跟异常名,如果
try: x=int(input("请输入数字:")) except ValueError: #可以同时捕获多个异常,写法如except(RuntimeError,ValueError): #当输入非数字时 print"您输入不是数字" except: #省略异常名,可以匹配所有异常,慎用 pass else:#当没有异常时 print 'result=',result finally:#一般用于释放资源,如文件,网络连接。 print 'finish'
该种异常处理语法的规则是:
· 首先 执行try下的语句(即try和except之间的语句):
If (try下的语句没有引发异常)
则try语句执行完毕,跳过except语句。
else (try下的语句引发异常)
则跳过try子句中剩余的句子;跳到except语句,如果异常和except后面知道的异常名匹配;然后再继续执行try语句后面的程序。
如果except后面的异常名和发生的异常不匹配,则异常未被处理;错误信息显示。
一个try语句可以有多个except语句,为不同的异常提供不同的处理。如果第一个except异常名不符合则执行下一个except语句
一个except又可以列出多个意外,例如:except(RuntimeError, TypeError, NameError),此方法要避免使用,容易错失异常
try...except后面还可以加else语句,当没有异常发生的时候则执行else语句。
下面是一个实例:
输出:
下面是一些Error的总结:
- 使用不存在的字典关键字将引发 KeyError 异常。
- 搜索列表中不存在的值将引发 ValueError 异常。
- 调用不存在的方法将引发 AttributeError 异常。
- 引用不存在的变量将引发 NameError 异常。
- 未强制转换就混用数据类型将引发 TypeError 异常。
- 文件路径不正确或不存在将引发IOError异常。
输出结果为: