python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
1,异常处理
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
ry:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
try:
# 不能确定执行的代码
num = int(input('请输入一个数字:'))
result = 8/num
except ZeroDivisionError:
print('0不能作除数')
except ValueError:
print('请输入正确的值')
except Exception as r:
print('未知错误!!',r)
else:
print('hello')
finally:
# 无论是否遇到错误异常都会执行
print('!!!!!!')
2,函数的错误:一级一级向上去找的 最终会将异常传递到主函数中去
def demo1():
try:
return int(input('请输入正确的整数:'))
except Exception as f:
print('未知错误 %s' %f)
def demo2():
return demo1()
print(demo2())
#执行结果
请输入正确的整数:df
未知错误 invalid literal for int() with base 10: 'df'
None
主动抛出异常
需求:提示用户输入密码 如果长度小于8位 就抛出异常
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)
print(input_passwd())
#执行结果
请输入密码:fd
主动抛出异常
密码长度不够,必须大于8位
2,断言:可以理解为提前预言 让人更好地知道错误原因
def func(num,div):
assert (div !=0),'div不能为0'
return num /div
print(func(10,0))
print('%%%')
#执行结果
Traceback (most recent call last):
File "/root/python/异常/01.py", line 36, in <module>
print(func(10,0))
File "/root/python/异常/01.py", line 34, in func
assert (div !=0),'div不能为0'
AssertionError: div不能为0 #提示错误