参考 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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦