异常处理
语法
普通的异常处理
try:
可能发生错误的代码
except:
如果出现异常,执行的代码
捕获特定异常
try:
可能发生错误的代码
except 异常类型:
如果捕获到该异常类型执行的代码
try:
print(num) # 未定义变量num
except NameError:
print('错误类型是NameError')
try:
print(1/0)
except NameError:
print('错误类型是NameError')
except ZeroDivisionError as e:
print(f'错误原因是{e}')
else 与 finally
try:
代码1
except Exception as e:
print(f'错误类型是Exception:{e}')
else: #当没有发生异常,就执行else
print('没有报错')
finally: #无论有没有异常,都会执行finally
print('这一行运行了')
应用例子
while True:
num = input('请输入一个小数')
try:
num = float(num)
except:
print('你输入的数不是一个小数,请重新输入')
抛出异常 raise
raise Exception('这里报错了') # 会直接抛出异常,报错
自定义异常类型
class PwdNotMatchError(Exception):
def __init__(self, pwd):
self.pwd = pwd
def __str__(self):
return(f'密码{self.pwd}不正确')
user_pwd = input('请输入你的密码')
if user_pwd != 'pwd':
raise PwdNotMatchError(user_pwd)
else:
print('密码正确')
断言
assert 1+1 == 2, "表达式错误" #为True时,不会报错
assert 1+1 == 3, "表达式错误" #为False时,会抛出报错