【Python基础】16.异常

异常

异常的概念

  • 在程序运行过程中,如果python的解释器遇到一个错误,会停止程序的执行,并且提示一系列的异常信息,这就是异常
  • 程序停止运行并显示错误信息,我们称之为:抛出(raise)异常
  • 通过抛出、捕获、处理异常,可以提高程序的稳定性和健壮性

示例

input_s = int(input("输入整数:"))
  • 输入字母 a
ValueError: invalid literal for int() with base 10: 'a'

捕获异常

案例1

try:
    input_s = int(input("输入整数:"))
except:
    print("输入异常,请重新输入")

print("-" * 50)

结果

输入整数:a
输入异常,请重新输入
--------------------------------------------------
  • 在程序执行时,可能会遇到不同的类型的异常,针对不同的异常,应该做出不同的处理,所以需要捕获异常的类型

案例2

try:
    input_s = int(input("输入整数:"))
except Exception as result:
    print("输入异常,异常原因:%s,请重新输入" % result)
输入整数:a
输入异常,异常原因:invalid literal for int() with base 10: 'a',请重新输入
  • 捕获异常的语法如下
try:
    # 尝试执行的代码
    pass
except 异常1# 针对异常1的处理
    pass
except (异常2,异常3):
    # 针对异常2,异常3的处理
    pass
except Exception as result:
    #针对未知异常的处理
    pass 

案例3

需求:

  • 从键盘输入一个数
  • 用8/这个数,针对键盘输出的不同内容做异常处理
try:
    input_s = int(input("输入整数:"))
    print(8 / input_s)
except ValueError as value_error:
    print("输入值有误")
except ZeroDivisionError as zero_division_error:
    print("除0错误")
except Exception as result:
    print("输入异常,异常类型%s,异常信息%s,请重新输入" % (type(result), result))

print("-" * 50)

上述案例中,最后一个异常处理是捕获未知错误。

  • 捕获未知错误
    • 开发过程中不能完全预判所有错误
    • 为了不在未知错误发生时,中止程序的运行。可以在捕获异常后,再增加一个 expect
except Exception as result:
    print("未处理错误类型%s,未处理错误详情%s"%(type(result), result)))

异常捕获的完整语法

try:
    pass
except:
    pass
else:
    # 没有异常才会执行的代码
finally:
    # 无论是否出现错误,都会被执行的代码
  • else 只有在没有异常时,才会执行的代码
  • finally 无论是否有异常,都会执行的代码

案例4

try:
    input_s = int(input("输入整数:"))
    result = 8 / input_s
except ValueError as value_error:
    print("输入值有误")
except ZeroDivisionError as zero_division_error:
    print("除0错误")
except Exception as result:
    print("输入异常,异常类型%s,异常信息%s,请重新输入" % (type(result), result))
else:
    print(result)
finally:
    print("-" * 50)
测试结果1
输入整数:1
8.0
--------------------------------------------------
测试结果2
输入整数:a
输入值有误
--------------------------------------------------
测试结果3
输入整数:0
除0错误
--------------------------------------------------

异常的传递性

  • 异常的传递:当函数/方法执行出现错误的时候,会将异常传递给函数/方法的调用方
  • 如果传递到主程序,仍然没有异常处理,程序才会中止
def exception1():
    print(int(input("请输入一个整数")))


def exception2():
    exception1()


exception2()

运行结果:

请输入一个整数a
Traceback (most recent call last):
  File "C:\Users\11\PycharmProjects\pythonProject\ExceptionRaise.py", line 9, in <module>
    exception2()
  File "C:\Users\11\PycharmProjects\pythonProject\ExceptionRaise.py", line 6, in exception2
    exception1()
  File "C:\Users\11\PycharmProjects\pythonProject\ExceptionRaise.py", line 2, in exception1
    print(int(input("请输入一个整数")))
          ^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'a'

可以利用异常的传递性,在主程序捕获异常并做处理

主动抛出异常

  • 在开发中,除了代码执行出错,python解释器抛出异常外
  • 可以根据应用程序特有的业务主动抛出异常

校验用户输入密码的长度

def exception1():
    pwd = input("请输入密码")
    if len(pwd) < 8:
        raise Exception("初始化密码失败,密码不能少于8位")


try:
    exception1()
except Exception as res:
    print("输入异常,异常类型%s,异常信息%s,请重新输入" % (type(res), res))

请输入密码1
输入异常,异常类型<class 'BaseException'>,异常信息初始化密码失败,密码不能少于8位,请重新输入
  • 将异常信息作为初始化参数并创建异常对象
  • 使用raise 语句抛出异常
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值