一、异常处理
1、异常基础
在编程的过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户。
而是实现一个提示的页面,通俗来讲就是不让用户看到程序报错的情况。
#!/user/bin/env ptyhon# -*- coding:utf-8 -*-# Author: VisonWong#异常处理list = ['hello','world']# print(list[2])# Traceback (most recent call last):# File "E:/Python/PythonLearing/error/单个异常.py", line 9, in# print(list[2])# IndexError: list index out of rangetry: list[2]except IndexError as e: print("IndexError:",e)# IndexError list index out of range
上面程序表示try里面的代码,如果出现IndexError这种代码,则执行except下面的代码,不会把错误信息显示给用户,程序也不会停止;
目前只能处理IndexError这一种异常,想处理多种异常可以这么写:
1 #!/user/bin/env ptyhon 2 # -*- coding:utf-8 -*- 3 # Author: VisonWong 4 5 # 多种异常处理 6 7 list = ["hello", "world"] 8 dict = { "vison":1,"wong":2} 9 message= "Hello word"10 try:11 #如果程序片段有多个异常,碰到第一个异常就会跳转到下面except执行12 list[2] #IndexError异常实例13 dict["wong1"] #KeyError异常实例14 int(message) #ValueError异常实例15 16 except IndexError as e:17 print("IndexError", e)18 19 except KeyError as e:20 print("KeyError", e)21 22 except ValueError as e:23 print("ValueError", e)24 25 26 # IndexError list index out of range
万能异常处理,在Python中有一个万能异常Exception,可以捕获任意异常。
1 #!/user/bin/env ptyhon 2 # -*- coding:utf-8 -*- 3 # Author: VisonWong 4 5 6 # 万能异常处理 7 8 message = "HelloWorld" 9 try:10 int(message)11 except Exception as e:12 print("Error:", e)13 14 15 # Error: invalid literal for int() with base 10: 'HelloWorld'
常用异常:
-
-
AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
-
IOError 输入/输出异常;基本上是无法打开文件
-
ImportError 无法引入模块或包;基本上是路径问题或名称错误
-
IndentationError 语法错误(的子类);代码没有正确对齐
-
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
-
KeyError 试图访问字典里不存在的键
-
KeyboardInterrupt Ctrl+C被按下
-
NameError 使用一个还未被赋予对象的变量
-
SyntaxError Python代码语法错误
-
TypeError 传入对象类型与要求的不符合
-
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
-
ValueError 传入一个调用者不期望的值,即使值的类型是正确的,如字符串转数字类型
-
更多异常
ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionFloatingPointErrorFutureWarningGeneratorExitImportErrorImportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrorNameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorStopIterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZeroDivisionError
2、异常的其他结构
1 #异常的其他结构 2 3 try: 4 # 主代码块 5 pass 6 except KeyError as e: 7 # 异常时,执行该块 8 pass 9 else:10 # 主代码块执行完,执行该块11 pass12 finally:13 # 无论异常与否,最终执行该块14 pass
二、自定义异常
1、主动触发异常
1 #!/user/bin/env ptyhon 2 # -*- coding:utf-8 -*- 3 # Author: VisonWong 4 5 6 # 主动触发异常 7 8 try: 9 raise Exception('错误了。。。')10 except Exception as e:11 print(e)12 13 # 错误了。。。
2、自定义异常
1 #!/user/bin/env ptyhon 2 # -*- coding:utf-8 -*- 3 # Author: VisonWong 4 5 # 自定义异常 6 7 class VisonException(Exception): 8 def __init__(self, msg): 9 self.message = msg10 11 def __str__(self):12 return self.message13 14 15 error = VisonException("我的异常")16 17 try:18 raise error19 20 except VisonException as e:21 print(e)22 23 # 我的异常