1
对于用户输入的,不能保证用户输入是正确的,这时就要采用异常处理机制(try —except–else–finally ),遇到编程中提前写入的指定错误,在用户输错时,提示用户错了,若用户输入的错误类型,程序提前没有写入,则执行(except Exception as r :下的内容)
try: #不能确定的执行代码
num = int(input('请输入一个数字:'))
result = 8/num
except ValueError: #可预见的错误,类型错误
print('请输入正确的类型!')
except ZeroDivisionError: #可预见的错误,0不能做除数
print('0不能做除数!')
except Exception as r: #不可预见的错误,把此错误类型当为r
print('未知错误,r')
else: #如果没有报错,执行的语句
print('hello')
finally:#不管有没有报错,都执行的语句
print('*' * 50)
输入指定错误:
输入 正确:
2
函数的错误:一级一级向上去找的 最终会将异常传递到主函数中去
def demo1():
try:
return int(input('请输入正确的整数:'))
except Exception as f:
print('未知错误 %s' %f)
def demo2():
return demo1()
print(demo2())
3.主动抛出异常
需求:提示用户输入密码 如果长度小于8位 就抛出异常
1.没有捕获
def input_passwd():
# 1.提示用户输入密码
pwd = input('请输入密码:')
# 2.判断密码长度
if len(pwd) >= 8:
return pwd
# 3.如果<8就主动抛出异常
print('主动抛出异常')
# a.创建异常对象
ex = Exception('密码长度不够,必须大于8位')
# b.主动抛出
raise ex
# 注意:只抛出而不捕获 代码会报错
print(input_passwd())
只抛出而不捕获 代码会报错:
2.抛出并捕获
def input_passwd():
# 1.提示用户输入密码
pwd = input('请输入密码:')
# 2.判断密码长度
if len(pwd) >= 8:
return pwd
# 3.如果<8就主动抛出异常
print('主动抛出异常')
# a.创建异常对象
ex = Exception('密码长度不够,必须大于8位')
# b.主动抛出
raise ex
# 注意:只抛出而不捕获 代码会报错
try:
print(input_passwd())
except Exception as re:
print(re)
结果:
即使长度小于8,也正常抛出,不报错!
4.断言
可以理解为提前预言 让人更好地知道错误原因
错误输入时:
def func(num,div):
assert (div !=0),'div不能为0'
return num /div
print(func(10,0))
print('%%%')
正确输入时:
def func(num,div):
assert (div !=0),'div不能为0'
return num /div
print(func(10,5))
print('%%%')