前言
异常
try:
#提示用户输入一个数
num = int(input("请输入数字"))
except:
print("请输入正确的数字")
多错误类型,
1.获取错误类型
num = int(input("请输入一个整数"))
# 使用8除以用户输入的整数并输出
result = 8 / num
print(result)
-----------------------
输出:
请输入一个整数a
Traceback (most recent call last):
File "/Users/rcefcn/Python/oop_面向对象/09_异常1.py", line 1, in <module>
num = int(input("请输入一个整数"))
ValueError: invalid literal for int() with base 10: 'a'
当 Python 解释器 抛出异常 时,最后一行错误信息的第一个单词,就是错误类型
所以发现没?这个错误异常就是他 ValueError:改写后就变成了
try:
num = int(input("请输入一个整数:"))
# 使用8除以用户输入的整数并输出
result = 8 / num
print(result)
except ValueError:
print('给老子输入数字')
except ZeroDivisionError:
print('分母不能为0哦')
未知错误
try:
num = int(input("请输入一个整数:"))
# 使用8除以用户输入的整数并输出
result = 8 / num
print(result)
except ValueError:
print('给老子输入数字')
except Exception as aa:
print('未知错误%s ' % aa)
异常的正常语法流程
try:
num = int(input("请输入一个整数:"))
# 使用8除以用户输入的整数并输出
result = 8 / num
print(result)
except ValueError:
print('给老子输入数字')
except Exception as aa:
print('未知错误%s ' % aa)
else:
# 只有没错时候,才会执行
print("尝试成功时,执行")
finally:
# 不管有没有错,都会执行
print("无论是否输出完成都会执行")
print("_"*50) # 补货异常代码输出完就会继续运行
异常的传递性
最终异常会传递到主函数
所以,异常最后在主函数捕获就好
代码如下
def demo1():
return int(input("要不要输入一个看看:"))
def demo2():
return demo1()
# 利用异常的传递性,在主函数捕获异常
try:
print(demo2())
except Exception as a:
print("捕获异常%s " % a)
主动异常抛出
比方,输入密码,如果少于8,是异常,抛出密码长度的异常
抛出 raise 异常
def input_password():
# 1.提示用户输入密码
pwd = input("请输入密码:")
# 2. 判断密码是否大于>=8 , 返回用户输入的密码
if len(pwd) >= 8:
return pwd
# 3.如何< 8 主动抛出异常
# 1.创建异常对象
ex = Exception('密码长度不够')
# 2.主动抛出异常
raise ex
# 提示用户输入密码
try:
input_password()
except Exception as result:
print(result)