洗礼灵魂,修炼python(27)--异常处理(1)—>了解异常
python学到这,其实你应该是在入门到进阶的中间阶段了,但是还没有到进阶的阶段的,这是肯定的,因为进阶得可以从实际问题中解决问题的,比如写一个自动化的爬虫程序啊,对一件事物作大数据归纳分析,开发一个多人聊天服务器等等的。目前还不够的
好,今天,说一个python中很关键的知识点——异常
异常
1.什么是异常:
异常即报错,就像前面例题解析中出现的报错,就是异常,python运行时出现的错误就是异常
2.都有哪些异常:
首先得分个类:
1):语法错误:代码的结构和语法上有错误导致不能被解释器解释或者不能被编译器编译的错误
2):逻辑异常:不完整或者不合法的输入所致,或者无法执行在逻辑上无法生成、计算或者输出的过程等等
异常类:
SyntaxError:Python代码逻辑语法出错,不能执行
EOFError:用户输入文件末尾标志EOF(Ctrl+d)
IndexError:下标索引超出序列的边界
StopIteration:迭代器没有更多的值,这个在前面绝对见过
IndentationError:缩进或者语法错误,代码没有正确的对齐
TabError:Tab和空格混合使用
TypeError:不同类型间的无效操作或者说传入的对象类型与要求不符,比如字符串和数字拼接等
ValueError:传入无效或者说不被期望的参数,即使类型正确
ZeroDivisionError:除数为零
lOError:输入输出异常,基本是无法打开文件
AssertionError:断言语句(assert),当条件不符合运算规则则报错
AttributeError:试图访问一个对象没有的属性
FloatingPointError:浮点计算错误,浮点型参与计算时出现的错误
GeneratorExit:generator.close()方法被调用的时候,生成器对象的关闭方法调用
ImportError:无法导入模块或者包,基本是路径问题或者模块名不存在
KeyError:试图访问字典中不存在的键或者不存在的键值
KeyboardInterrupt:用户输入中断键(Ctrl+c),当程序还在运行,按ctrl+c手动结束程序时
MemoryError:内存溢出(可通过删除对象释放内存),内存被占满
NameError:试图访问一个不存在或者说还未赋予对象的变量变量
UnboundLocalError:NameError的子类。试图访问一个还未设置或者说还未初始化的全局变量,基本上是由于另有一个同名的本地变量(这个前一两章才说过)
NotImplementedError:尚未实现的方法
OSError:操作系统产生的异常,打开一个不存在的文件或者拒绝访问的文件时
OverflowError:数值运算超出最大限制
ReferenceError:弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError:一般的运行时错误
SystemError:Python编译器系统错误,IDE的问题
SystemExit:Python编译器进程被关闭
UnicodeError:Unicode相关的错误(ValueError的子类)
UnicodeEncodeError:Unicode编码时的错误(UnicodeError的子类)
UnicodeDecodeError:Unicode解码时的错误(UnicodeError的子类)
UnicodeTranslateError:Unicode转换时的错误(UnicodeError的子类)
是不是觉得好多啊?我也觉得多,下面的是我归纳出的比较常见的异常,掌握这些基本够解决大部分问题了:
AssertionError |
断言语句(assert),当条件不符合运算规则则报错 |
AttributeError |
试图访问一个对象没有的属性 |
lOError |
输入输出异常,基本是无法打开文 |
ImportError |
无法导入模块或者包,基本是路径问题或者模块名不存在 |
IndentationError |
缩进或者语法错误,代码没有正确的对齐 |
IndexError |
下标索引超出序列的边界 |
KeyError |
试图访问字典中不存在的键或者不存在的键值 |
KeyboardInterrupt |
用户输入中断键(Ctrl+c),当程序还在运行,按ctrl+c手动结束程序时 |
NameError |
试图访问一个不存在或者说还未赋予对象的变量变量 |
SyntaxError |
Python代码逻辑语法出错,不能执行 |
TypeError |
传入无效或者说不被期望的参数,即使类型正确 |
UnboundLocalError |
NameError的子类。试图访问一个还未设置或者说还未初始化的全局变量,基本上是由于另有一个同名的本地变量 |
ValueError |
传入一个不被期望的值,即使类型正确 |
3. 内置异常类的结构层次:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
下面一章讲解怎么运用异常,捕获异常