python学习笔记8-异常处理

1、异常处理python

在程序运行过程当中,总会遇到各类各样的错误。程序一出错就中止运行了,那咱们不能让程序中止运行吧,这时候就须要捕捉异常了,经过捕捉到的异常,咱们再去作对应的处理。函数

下面咱们先写一个函数,实现除法运算。测试

def calc(a,b):
 
    return a/b
 
print(calc(5,1))#调用,没有错误,结果是5.0
 
>>> 5.0
 
print(calc(5,0))#再次调用,这时候就不对了,由于被除数不能为0,下面报了一堆错,程序中止运行了
 
>>> ZeroDivisionError: division by zero

这个时候咱们就须要捕捉异常了,若是除数是0的话,就提示用户传入的参数不对,从新传入。对象

捕捉异常使用try....except....关键字,就是你在写代码的时候,先要考虑到这段代码可能会出现什么样的错误,而后作对应的处理,try里面就是包含你作处理的代码,except里面就是出了某种错误的时候,我怎么去处理,下面咱们改下代码,捕捉异常。blog

ef calc(a,b):
 
try:
 
res = a/b
 
except ZeroDivisionError as e:#若是是除数为0的错误,就返回除数不能为0,这个as e表明把返回错误的信息赋给e
 
return '除数不能为0!'
 
return res#这个是若是没有这个异常的话,就返回结果
 
print(calc(5,0))#这样再调用就不会出来错误了,就返回除数不能为0这个了。

上面就是捕捉异常,固然上面的只能捕捉到除数为0的错误,若是有别的错误就捕捉不到了;还有一个finally的用法,就是无论出不出异常都执行;try还有一个能够捕捉全部异常,还有else的用法,就是没出异常的时候怎么办,下面用代码来解释。索引

def calc(a, b):
    try:  # 捕捉异常
        res = a / b
    except ZeroDivisionError as e:
        return '除数不能为0!'
    except KeyError as e:  # 捕捉KeyError这个异常,固然这段代码没用到字典,因此不会有keyerror这个错误,我只是举个例子
        return 'keyerror错误'
    except Exception as e:  # 这个是捕捉全部的异常,无论你有什么异常均可以捕捉到
        print('其余异常')
        return e  #返回错误信息
    else:  #这个else和上面的try对应的,也就是不出异常的话走这里
        print('没有出异常')
        return res
    finally:  #这个finally是无论这个段代码有没有出异常都走它
        print('出没出异常都走我这里')
 
print(calc(5, 0))  #出除数异常了,会返回除数不能为0!和执行finally里面的代码
 
print(calc(5, 1))  #这个没有出异常,就会走else里面的东西,返回结果,也会执行执行finally里面的代码
 
print(calc(5, 's'))  #这个也走异常了,除数是字符串,确定不能除,就走那个捕捉全部异常的代码了,也会执行执行finally里面的代码

2、常见的一些异常信息:字符串

AttributeError: 试图访问一个对象没有的属性,好比foo.x,可是foo没有属性x
 
IOError:输入/输出异常,通常是没法打开文件
 
ImportError: 没法导入模块或包,通常是路径问题或名称错误
 
IndentationError:代码没有正确对齐,属于语法错误
 
IndexError:下标索引超出序列边界,好比x只有三个元素,却试图访问x[3]
 
KeyError:试图访问字典里不存在的键
 
KeyboardInterrupt:Ctrl+C被按下
 
NameError:使用一个还未被赋予对象的变量
 
SyntaxError: 语法错误
 
TypeError: 传入对象类型与要求的不符
 
UnboundLocalError:试图访问一个还未被设置的局部变量,通常是因为在代码块外部还有另外一个同名变量
 
ValueError: 传入一个调用者不指望的值,即便值的类型是正确的

3、主动抛出异常自动化

主动抛出异常,就是咱们在代码里面让它自动抛出一个异常,而后捕捉到,好比说咱们在写自动化测试脚本的时候,结果和预期不符合,就能够主动抛出一个异常信息,而后捕捉到,作其余的处理,主动抛出异常使用raise关键字。io

 
try:
 
    raise KeyError#主动抛出一个keyerror的异常
 
except KeyError as e:
 
    print('这个是我主动抛出的异常')
相关文章
相关标签/搜索