python:关于异常,你需要知道什么。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/rusi__/article/details/102648671

摘要

  • 异常的完整语法
  • 主动抛出异常
  • 自定义异常
  • 小知识点拓展(穿插代码中或文本中)

异常的完整语法

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)

  • 补充,主动抛出异常的应用场景:处理解释器不知道的未知异常

猜你喜欢

转载自blog.csdn.net/rusi__/article/details/102648671