天池Python练习04-异常处理

目录

1 异常处理

1.1 Python标准异常总结

1.2 Python标准警告总结

1.3 try-except 语句

1.4 try-except-finally语句

1.5 try-except-else 语句

1.6 raise 语句


1 异常处理

        异常处理就是运行监测遇到的错误。计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序被启动,从而恢复程序的正常运行。


1.1 Python标准异常总结

1. BaseException:所有异常的 基类

2. Exception:常规异常的 基类

3. StandardError:所有的内建标准异常的基类
4. ArithmeticError:所有数值计算异常的基类
5. FloatingPointError:浮点计算异常
6. OverflowError:数值运算超出最大限制
7. ZeroDivisionError:除数为零
8. AssertionError:断言语句(assert)失败
9. AttributeError:尝试访问未知的对象属性
10. EOFError:没有内建输入,到达EOF标记
11. EnvironmentError:操作系统异常的基类
12. IOError:输入/输出操作失败
13. OSError:操作系统产生的异常(例如打开一个不存在的文件)
14. WindowsError:系统调用失败
15. ImportError:导入模块失败的时候
16. KeyboardInterrupt:用户中断执行
17. LookupError:无效数据查询的基类
18. IndexError:索引超出序列的范围
19. KeyError:字典中查找一个不存在的关键字
20. MemoryError:内存溢出(可通过删除对象释放内存)
21. NameError:尝试访问一个不存在的变量
22. UnboundLocalError:访问未初始化的本地变量
23. ReferenceError:弱引用试图访问已经垃圾回收了的对象
24. RuntimeError:一般的运行时异常
25. NotImplementedError:尚未实现的方法
26. SyntaxError:语法错误导致的异常
27. IndentationError:缩进错误导致的异常
28. TabError:Tab和空格混用
29. SystemError:一般的解释器系统异常
30. TypeError:不同类型间的无效操作
31. ValueError:传入无效的参数
32. UnicodeError:Unicode相关的异常
33. UnicodeDecodeError:Unicode解码时的异常
34. UnicodeEncodeError:Unicode编码错误导致的异常
35. UnicodeTranslateError:Unicode转换错误导致的异常
 

1.2 Python标准警告总结

1. Warning:警告的基类
2. DeprecationWarning:关于被弃用的特征的警告
3. FutureWarning:关于构造将来语义会有改变的警告
4. UserWarning:用户代码生成的警告
5. PendingDeprecationWarning:关于特性将会被废弃的警告
6. RuntimeWarning:可疑的运行时行为(runtime behavior)的警告
7. SyntaxWarning:可疑语法的警告
8. ImportWarning:用于在导入模块过程中触发的警告
9. UnicodeWarning:与Unicode相关的警告
10. BytesWarning:与字节或字节码相关的警告
11. ResourceWarning:与资源使用相关的警告

1.3 try-except 语句

try :
    检测范围
except Exception[as reason] :
    出现异常后的处理代码

1. 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
2. 如果没有异常发生,忽略 except 子句, try 子句执行后结束。
3. 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的。
名称相符,那么对应的 except 子句将被执行。最后执行 try 语句之后的代码。
4. 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。

try :
    f = open('text.txt')
    print(f.read())
    f.close()
except OSError :
    print('文件打开错误')
>>>文件打开错误

try :
    f = open('text.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('文件打开错误原因是:'+str(error))
>>>文件打开错误原因是:[Errno 2] No such file or directory: 'text.txt'

        一个try语句可能包含多个except子句,分别来处理不同的特定的异常。最多会有一个分支会被执行。

dict1={'a':1,'b':2,'c':3}
try:
    x=dict1['x']
except LookupError:
    print('查询错误')
except KeyError:
    print('键错误')
else:
    print(x)
>>>查询错误

        try-except-else 语句尝试查询不在 dict 中的键值对,从而引发了异常。这一异常准确地说应属于 KeyError ,但由于 KeyError 是 LookupError 的子类,且将 LookupError 置于 KeyError 之前,因此程序优先执行该 except 代码块。
        所以,使用多个 except 代码块时,必须坚持对其规范排序,要从最具针对性的异常到最通用的异常。

try:
    s = 1 + '1'
    int("abc")
    f = open('test.txt')
    print(f.read())
    f.close()
except (OSError, TypeError, ValueError) as error:
    print('出错了!\n原因是:' + str(error))
>>>出错了!
原因是:unsupported operand type(s) for +: 'int' and 'str'

        一个 except 子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

1.4 try-except-finally语句

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码
finally:
    无论如何都会被执行的代码

        不管 try 子句里面有没有发生异常, finally 子句都会执行。
        如果一个异常在 try 子句里被抛出,而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后被抛出。


1.5 try-except-else 语句

        如果在 try 子句执行时没有发生异常,Python将执行 else 语句后的语句。

try:
    检测范围
except:
    出现异常后的处理代码
else:
    如果没有异常执行这块代码

        使用 except 而不带任何异常类型,这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所有的异常。

        注意: else 语句的存在必须以 except 语句的存在为前提,在没有 except 语句的 try 语句中使用 else 语句,会引发语法错误。

1.6 raise 语句

        Python 使用 raise 语句抛出一个指定的异常。

try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值