异常处理
一、格式
1 通用格式
try:
可能出现异常的代码
except:
如果有异常执行的代码
[finally:
无论是否存在异常都会被执行的代码] # 可有可无
2 情况一
try:
有可能会产生多种异常
except 异常的类型1:
print(。。。。)
except 异常类型2:
pass
except Exception:
pass
'''
如果是多个except,异常类型的顺序需要注意,
最大的Exception要放到最后
'''
def func():
try:
n1 = int(input('输入第一个数字:'))
n2 = int(input('输入第二个数字:'))
# + 加法
per = input('输入运算符号(+ - * /):')
result = 0
if per == '+':
result = n1 + n2
elif per == '-':
result = n1 - n2
elif per == '*':
result = n1 * n2
elif per == '/':
result = n1 / n2
else:
print('符号输入有误!')
print('结果是:', sum)
except ZeroDivisionError:
print('除数不能为零!!!!')
except ValueError:
print('必须输入数字!!!!')
except Exception:
pass
3 情况二:获取Exception的错误原因
try:
有可能会产生多种异常
except 异常类型1:
print(。。。。)
except 异常类型2:
pass
except Exception as err:
print(err) ----> err的内容就是错误原因:
4 情况三:try…except…(多个except)…else
try:
有可能有异常的代码
except 类型1:
pass
. . .
else:
如果try中没有发生异常则进入的代码
注意: 如果使用else则在try代码中不能出现return,否则else语句将不会执行
5 情况四:try…except…finally
# 文件操作 stream = open(...) stream.read() stream.close()
# 数据库操作 close()
try:
pass
except:
pass
finally:
'''无论报不报错都会执行finally里的代码块'''
pass
二、异常抛出
'''
注册 用户名必须6位
''
def register():
username = input('输入用户名:')
if len(username) < 6:
raise Exception('用户长度必须6位以上')
else:
print('输入的用户名是:', username)
try:
register()
except Exception as err:
print(err)
print('注册失败!')
else:
print('注册成功!')
练习题
猜数字游戏
题目描述:
电脑产生一个零到100之间的随机数字,然后让用户来猜,如果用户猜的数字比这个数字大,提示太大,否则提示太小,当用户正好猜中电脑会提示,“恭喜你猜到了这个数是…”。在用户每次猜测之前程序会输出用户是第几次猜测,如果用户输入的根本不是一个数字,程序会告诉用户"输入无效"。
(尝试使用try catch异常处理结构对输入情况进行处理)
获取随机数采用random模块。
import numpy as np
x = np.random.randint(100)
i = 1
while True:
try:
y = int(input("第{}次猜,请输入0到100之间的整数:".format(i)))
i = i + 1
if y < x:
print("太小")
elif y > x:
print("太大")
else:
print("恭喜你猜到了,这个数是{}".format(y))
except ValueError:
print("输入无效")