版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
摘要
- 异常的完整语法
- 主动抛出异常
- 自定义异常
- 小知识点拓展(穿插代码中或文本中)
异常的完整语法
try:
# 提示用户输入一个整数
num = int(input("请输入一个整数:"))
# 使用数字8除以这个整数并且输出
result = 8 / num
print(result)
# 当python 解释器抛出异常时,最后一行的错误信息的第一个单词,就是错误类型。
except ValueError: # 捕获特定异常(也可以继续添加 as b)
print("请输入正确的整数")
print("可以继续执行的代码") # 可以继续执行的代码
except Exception as a: # 捕获未知异常赋值给a
print("未知错误%s" % a)
print("可以继续执行的代码") # 可以继续执行的代码
else: # 尝试执行的代码正确时会执行的代码
print("这个语法是正确的")
finally: # 不管怎样都会执行的代码
print("不管怎样都会执行的代码")
- 补充:
1,如果想将小数转化为整数的时候,可以用round()函数。
2,异常中的关键字顺序是固定的。
主动抛出异常1
def input_password():
# 提示用户输入密码、
pwd = input("请输入密码:")
# 判断密码长度是否大于等于8,返回用户输入的密码
if len(pwd) >= 8:
return pwd
# 如果长度小于8 主动抛出异常
ex = Exception("密码长度不够") # 创建异常对象 - 可以使用错误信息字符串作为参数
raise ex # 主动抛出异常(finally:也不能让之后的代码运行)
print('抛出异常后的代码') # 可以发现 在异常抛出后该函数的代码将不在执行
# 只有抛出异常之后,调用函数一方才能接收到异常信息,并打印出来(常处理python解释器不知道的错误)
try:
print(input_password()) # 打印输入正确密码时返回的pwd
except Exception as a:
print(a)
# 如果将7,8,9行代码屏蔽,输入a,则报出的异常为 None
- 补充:raise抛出异常后,接下来的代码不会再执行,finally也不可以(参考主动抛出异常1),if判断之后的也不行(参考主动抛出异常2)。
主动抛出异常2
def input_password():
# 提示用户输入密码、
pwd = input("请输入密码:")
# 当密码长度小于8的时候进入判断
if len(pwd) <= 8:
ex = Exception("密码长度不够")
raise ex
print("raise之后的代码")
print("raise之后的代码2")
return pwd
try:
print(input_password())
except Exception as a:
print(a)
自定义异常
# 通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
# 以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
# 在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。
class Networkerror(RuntimeError): # 继承一般运行错误的类
def __init__(self, cq):
self.cq = cq
# print(self.cq)
# 在你定义以上类后,你可以触发该异常,如下所示:
try:
raise Networkerror("错误") # 直接抛出异常
# 等于except Exception as e:
except Networkerror as e: # 捕获异常
print(e) # 等于print(e.cq)
- 补充,主动抛出异常的应用场景:处理解释器不知道的未知异常。