为了账号安全,请及时绑定邮箱和手机立即绑定

Python28 异常

标签:
Python

参考 http://www.cnblogs.com/wupeiqi/articles/5017742.html

异常

name = ['zhangsan','lisi']print (name[3])data = {'name':'Amy'}print (data['name'])执行结果:Traceback (most recent call last):  File "E:/python/代码练习/B1.py", line 20, in <module>    print (name[3])IndexError: list index out of range#并不存在name[3]这个元素,所以会报错;但是因为报错的原因整个程序就崩溃了,下面的代码就不会再去执行。
data = {}try:    #尝试执行下面的代码    data['name']except KeyError as k:   #否则如果出现了KeyError这个错误,就执行下面的代码;#如果出现KeyError错误,就捕获错误结果然后赋值给这个k(也可以起其他的名字)    print ('没有这个key',k)执行结果:没有这个key 'name'
name = ['zhangsan','lisi']data = {}try:    name[3]     #报错    data['name']    #这里没有执行except KeyError as k: #这里没有执行    print ('没有这个key',k)except IndexError as k:  #因为尝试name[3],但是报错后直接代码就到了这里;只要出现一个错误,就不会处理其他错误。    print ('列表元素不存在',k)执行结果:列表元素不存在 list index out of range
name = ['zhangsan','lisi']data = {}try:    name[3]    data['name']except (KeyError,IndexError) as k:  #可以通过括号将多种错误写到一起;这种方式适用当出现错误时使用同一种处理办法的场景    print ('错误:',k)执行结果:错误: list index out of rangename = ['zhangsan','lisi']data = {}try:    # name[3]   #注释掉    data['name']except (KeyError,IndexError) as k:    print ('错误:',k)执行结果:错误: 'name'#从上到下的错误执行顺序
name = ['zhangsan','lisi']data = {}try:    # name[3]    # data['name']    open('abc.txt')except KeyError as k:    print ('没有这个key',k)except IndexError as k:    print ('列表元素不存在',k)except Exception as k:  #使用Exception能抓取大部分错误;使用场景是当预判的错误没有触发,但触发了自己没有预判的错误时,可以使用Exception    print ('未知错误',k)执行结果:未知错误 [Errno 2] No such file or directory: 'abc.txt'
try:    a = 123    print (a)except KeyError as k:    print ('没有这个key',k)except IndexError as k:    print ('列表元素不存在',k)except Exception as k:    print ('未知错误',k)else:   #当没有任何错误时,执行else下面的代码    print ('一切正常')执行结果:123一切正常
try:    open('abc.txt')    a = 123    print (a)except KeyError as k:    print ('没有这个key',k)except IndexError as k:    print ('列表元素不存在',k)except Exception as k:    print ('未知错误',k)else:    print ('一切正常')finally:    print ('不管有没有错误,都执行该代码')执行结果:未知错误 [Errno 2] No such file or directory: 'abc.txt'不管有没有错误,都执行改代码
try:    a = 123    print (a)except KeyError as k:    print ('没有这个key',k)except IndexError as k:    print ('列表元素不存在',k)except Exception as k:    print ('未知错误',k)else:    print ('一切正常')finally:    print ('不管有没有错误,都执行该代码')执行结果:123一切正常不管有没有错误,都执行该代码
ValueError错误:s1 = 'hello'try:    int(s1)except ValueError as e:    print (e)执行结果:invalid literal for int() with base 10: 'hello'

常用异常:

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError 输入/输出异常;基本上是无法打开文件ImportError 无法引入模块或包;基本上是路径问题或名称错误IndentationError 语法错误(的子类) ;代码没有正确对齐IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]KeyError 试图访问字典里不存在的键KeyboardInterrupt Ctrl+C被按下NameError 使用一个还未被赋予对象的变量SyntaxError Python代码非法,代码不能编译(语法错误)TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它ValueError 传入一个调用者不期望的值,即使值的类型是正确的

更多异常:

ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionFloatingPointErrorFutureWarningGeneratorExitImportErrorImportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrorNameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorStopIterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZeroDivisionError

自定义异常

class LiSiException(Exception): #自动以异常的名字为:LiSiException#括号中的Exception是继承Exception这个基类    def __init__(self, msg):        self.message = msg  #触发异常后的信息try:    raise LiSiException('自定义异常')      #因为不是python自带的异常,所以需要raise来触发;    #'自定义异常'会被传给self.messageexcept LiSiException as info:   #将触发后的信息赋值给info    print (info)执行结果:自定义异常

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消