异常处理

一、异常

有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError

异常例子:

res=5/0
print(res)
#运行报错
#ZeroDivisionError: division by zero

字符串与整型不能相加异常:

import random
guess=random.randint(10,20)
num=input('请输入一个数字:')
print(num+guess)

# 请输入一个数字:6
# Traceback (most recent call last):
#   File "F:/自动化学习/课堂练习/day8/new_api/异常处理.py", line 6, in <module>
#     print(num+guess)
# TypeError: Can't convert 'int' object to str implicitly

英文字符串转整型异常:

d={'price':20}
price=input('请输入一个数字:')
d['price']-=int(price)
print(d)

# D:\System\Python3\python.exe F:/自动化学习/课堂练习/day8/new_api/异常处理.py
# 请输入一个数字:ert
# Traceback (most recent call last):
#   File "F:/自动化学习/课堂练习/day8/new_api/异常处理.py", line 16, in <module>
#     d['price']-=int(price)
# ValueError: invalid literal for int() with base 10: 'ert'

下标越界异常:

li=[1,2,3,4,5]
print(li[9])
# Traceback (most recent call last):
#   File "F:/自动化学习/课堂练习/day8/new_api/异常处理.py", line 27, in <module>
#     print(li[9])
# IndexError: list index out of range

二、异常处理

1、当代码中运行可能会遇到异常时,可以用try ... except  例如输入的值异常时:可以try ..except ValueError as e:

first=input('请输入除数')
second=input('请输入被除数')
#用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常
try:
    first=int(first)
    second=int(second)
    res=first/second
    print(res)
#except 则是出错错误会怎么办,因为这个报错是ValueError,所以写ValueError
except ValueError as e:#e 代表错误信息,如果上面的两行代码出现了ValueError这个错误则走这里
    print(e)
    print('请输入整数')
else:#没有出错,这个是没有异常时候走,不是必须写的
    print(res)

#结果:
请输入除数f
请输入被除数2
invalid literal for int() with base 10: 'f'

2、多个异常可以:try...excepy...excepy,例如输入的值异常、被除数不能为0异常时:可以try ...except ValueError as e:...exceptZeroDivisionErroras e:

first=input('请输入除数')
second=input('请输入被除数')
#用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常
try:
    first=int(first)
    second=int(second)
    res=first/second
    print(res)
#except 则是出错错误会怎么办,因为这个报错是ValueError,所以写ValueError
except ValueError as e:#e 代表错误信息,如果上面的两行代码出现了ValueError这个错误则走这里
    print(e)
    print('请输入整数')
except ZeroDivisionError as e:
    print(e)
    print('除数不能为0')
else:#没有出错,这个是没有异常时候走,不是必须写的
    print(res)

#结果:请输入除数12
请输入被除数0
division by zero
除数不能为0

3、当多个异常可以只用一个try ...except Exception as e:

first=input('请输入除数')
second=input('请输入被除数')
#用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常
try:
    first=int(first)
    second=int(second)
    res=first/second
except Exception as e:
    print(e)
else:#没有出错,这个是没有异常时候走,不是必须写的
    print(res)
#结果:
请输入除数qw
请输入被除数g
invalid literal for int() with base 10: 'qw'

4、finally:不管出错或者没有出错都会执行它,这个不是必须写的。

一般要写的情况有:例如操作数据库成功或者失败,都要关闭数据库

first=input('请输入除数')
second=input('请输入被除数')
#用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常
try:
    first=int(first)
    second=int(second)
    res=first/second
    print(res)
#except 则是出错错误会怎么办,因为这个报错是ValueError,所以写ValueError
# except ValueError as e:#e 代表错误信息,如果上面的两行代码出现了ValueError这个错误则走这里
#     print(e)
#     print('请输入整数')
# except ZeroDivisionError as e:
#     print(e)
#     print('除数不能为0')
except Exception as e:
    print(e)
else:#没有出错,这个是没有异常时候走,不是必须写的
    print(res)
finally:#不管出错或者没有出错都会执行它,不是必须写的。要写的情况:例如操作数据库成功或者失败,都要关闭数据库
    print('我是finally')

 

posted @ 2018-05-24 22:01  懒虫小园  阅读(197)  评论(0编辑  收藏  举报