Python异常处理

         Python使用称为异常(exception)的特殊对象来管理程序运行期间发生的错误。每当发生错误时,它都会创建一个异常对象(比如FileNotFoundError);如果用户编写了处理该异常的代码,即使出现异常,程序也将继续运行,显示用户自己编写的错误提示信息,而不是traceback;如果用户未对异常进行处理,程序将停止,并显示一个traceback,其中包含异常有关的报告。

处理异常

1)try_except...

        如果在执行 try 子句时没有异常发生,则不会执行 except 子句。
        如果 try 子句发生了异常,则跳过该子句中剩下的部分,执行 except子句。
        如果 except 子句没有指定异常类型,则可以处理 try 中的所有异常类型。
        如果 except 子句可以指定多个异常类型(指定多个异常类型时,也可以用元组来表示)。
        如果一个异常没有与任何的 except 匹配,则报错。

        如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上 层的 try 中。

def div(a, b):
    try:
        try:
            c = a / b
            print(f"{a} / {b} = {c}")
        except ZeroDivisionError:
            print('try中发生了除数为0的异常')
    except:
        print('发生了除0以外的异常')

div('2', 2)

2)try ... except ... else ...

        else 子句必须放在所有的 except 子句之后 ,另外else 子句将在 try 子句没有发生任何异常的时候执行。

def div(a, b):
    try:
        c = a / b
        print(f"{a} / {b} = {c}")
    except ZeroDivisionError:
        print('try中发生了除数为0的异常')
    except:
        print('发生了除0以外的异常')
    else:
        print('try中没有异常')

div(2, 1)
div(2, 0)
div('2', 2)

3)try ... except ... as ...

        as 后面为异常实例对象的名称

def div(a, b):
    try:
        c = a / b
        print(f"{a} / {b} = {c}")
    # e:ZeroDivisionError('division by zero')
    except ZeroDivisionError as e:
        print(isinstance(e, ZeroDivisionError))
        print(e)
        print(ZeroDivisionError('division by zero'))

div(2, 0)

4)... finally ...

        finally 子句将作为上述异常处理语句结束前的最后一项任务被执行;不论 try 语句是否产生了异常都会被执行。

def div(a, b):
    try:
        exit()    #当放在try外的话,finally就不会再执行了
        c = a / b
        print(f"{a} / {b} = {c}")
    except:
        print('except在发生异常时执行')
    else:
        print('else在没有异常时执行')
    finally:
        print('finally在任何情况下都会被执行')

div(2, 1)
div(2, 0)

        如果 finally 子句中包含一个 return 语句,则返回值将来自 finally 子 句中的 return 语句的返回值,而非来自 try 子句中的 return 语句的返 回值。

def return_num():
    try:
        return 1
    finally:
        return 2

print(return_num())

抛出异常

        raise 语句可以主动的抛出异常。

        raise 后面可以是 异常实例 / 异常类 / 没有内容。

def div(a, b):
    if b == 0:
        raise ZeroDivisionError('除数为0')    # 抛出异常实例对象
        c = a / b
        print(f"{a} / {b} = {c}")

div(2, 1)
div(2, 0)

自定义异常

# class MyError:
#     def __init__(self, message=''):
#         self.message = message
# 
#     def __str__(self):  # 与__repr__等效
#         return str(self.message)
# 
# 
# print(MyError("发生了一个异常"))

#自定义的异常类通常需要直接或间接的继承 Exception 类,
#该Excetpion已经实现了__str__。
class MyError2(Exception):
    pass

print(MyError2("发生了一个异常"))

assert断言

        assert 用于判断一个表达式,在表达式为 False 的时候触发 AssertionError 异常,为True的话继续向下执行。

        assert expression 等价于 if not expression: raise AssertionError

        assert expression [, arguments] 等价于:if not expression: raise AssertionError(arguments)

num = int(input("请输入一个整数: "))
assert num != 1, "用户不能输入1"    # assert expression [, arguments]
print("断言条件为True, 用户没有输入1")

.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张帅峰_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值