Python基础-面向对象-错误和异常处理

异常处理

Python解释器检测到错误,触发异常(也允许程序员自己触发异常),编写特定代码来捕捉异常并进行另外一个分支的异常处理。异常处理代码不应与程序本身逻辑产生影响。

==增加异常处理机制是为了增强程序的健壮性与容错性==

常用异常表

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

异常处理方式

异常未处理示例

# -*- coding:utf8 -*-
a = 4
list = [1,2,3]
list[a]
Traceback (most recent call last):
  File "F:/python/day29/异常处理.py", line 3, in <module>
    list[4]
IndexError: list index out of range

if异常处理

本身可以解决异常,但需要处理逻辑教多,重复代码教多。可读性差

示例

# -*- coding:utf8 -*-
a = "4"
list = [1,2,3]
if a.isdecimal() == True and int(a) <= len(list) - 1:
    print(list[int(a)])
else:
    print("程序错误,请输入正确的数值!")
程序错误,请输入正确的数值!

Python异常处理模型

语句

try:
    #被检测的代码块#
except  异常类型:
    #检测到异常的通知逻辑

单分支示例

# -*- coding:utf8 -*-
try:
    a = 4
    list = [1,2,3]
    list[a]
except IndexError as e:         #异常信息赋值
    print(e)                    #打印异常信息
list index out of range

多分支示例

try:
    a = 4
    list = [1,2,3]
    list[a]
except IndexError as e:
    print(e)
except ValueError as f:
    print(f)
list index out of range

万能异常示例

# -*- coding:utf8 -*-
try:
    a = 4
    list = [1,2,3]
    list[a]
except Exception as z:
    print(z)
list index out of range.

其它异常机构

try:
    [被检测的代码块]
except  异常类型:
    [检测到异常的通知逻辑]
else:
    [没有异常则执行的代码块]
finally:
    [无论异常与否都会执行该代码块]

猜你喜欢

转载自my.oschina.net/zhaojunhui/blog/1802012