异常
1.常见的异常
print(10/0)
ZeroDivisionError: division by zerostr = ‘hello’
print(str[10])
IndexError: string index out of ranged = dict(a=1,b=2)
d = {
‘a’:1,
‘b’:2
} print(d.get(‘c’,‘key不存在’)) print(d.get(‘c’)) print(d[‘c’])KeyError: ‘c’
2.try和except
这是一种更温和的方法 当不确定用户输入的内容时 我们不能直接把报错留给用户 而选择这种方法去解决异常
try:
# 不能确定正确之行的代码
num = int(input('请输入一个数字:'))
print(num)
except:
# try里面的代码如果有异常/错误 才会之行以下代码
print('请输入正确的整数!!!!')
print('*' * 50)
3.try except else finally的综合使用
程序没有碰到致命错误 就执行else
无论是否遇到异常都会执行finally
try:
num = int(input('Num:'))
result = 8 / num
print(result)
except ZeroDivisionError:
print('0不能做除数')
# except ValueError:
# print('请输入正确的值')
except Exception as r:
print('未知错误!!')
# 程序没有碰到致命错误 就执行else
else:
print('hello')
finally:
# 无论是否遇到异常都会执行
print('!!!!')
4.函数的错误
函数的错误:一级一级向上去找 最终会将异常传递到主函数里面去
def demo1():
try:
return int(input('请输入正确的整数:'))
except Exception as r:
print('未知错误 %s' %r)
def demo2():
return demo1()
print(demo2())
5.抛出异常
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)
5.练习
练习1
录入学生信息的系统;
对录入的信息进行校验: 1). len(姓名)>2 2). 18<age<25
def name_info():
name=input('请输入姓名:')
if len(name) >=2 :
return name
ex1 = Exception('姓名小于两位,请重新输入')
raise ex1
def age_info():
age = int(input('请输入年龄:'))
if age >= 18 and age<= 25:
return age
ex2=Exception('请输入正确的年龄')
raise ex2
def stu_info():
return name_info(),age_info()
try:
print(stu_info())
except Exception as r:
print(r)
练习2
用户可以一直输入数字, 当按ctrl+c之后计算所有数的和;
result = 0
while True:
try:
num = int(input('Num:'))
result += num
except KeyboardInterrupt:
print('运行结果:',result)
break