Python关于异常处理的使用方法

主要内容

1. try-except、else、finall用法
2. 捕获已知异常、未知异常
3. 自定义异常类

使用样例

# Exception异常类
def except_test1():
    try:
        a = int(input("请输入一个数字:"))
        print(1 / a)
    # 捕获已知的异常ZeroDivisionError, 符合该异常类型则会抛出该异常,否则默认使用except:处理
    except ZeroDivisionError:
        print('分数不能为0')
    # except是所有异常类的父类,常用于捕获未知的异常
    except:
        print('其他错误')


# try-except-else用法
def except_test2():
    try:
        x = int(input())
        print(x + 2)
    # 异常类对象e,可输出该异常信息
    except ValueError as e:
        print(e)
    # 无异常时执行的代码
    else:
        print('没有错误发生')


# finally用法
def except_test3():
    try:
        f = open('aaa', 'r')
        print(f.read())
    except FileNotFoundError:
        print('文件找不到')
    finally:
        print("有无异常时都会被执行")


# 使用raise捕获异常
def except_test4():
    a = (1, 2, 3)
    try:
        # print异常,则后面的语句不会执行到raise,此时使用raise保存异常信息不会执行到
        print(a[4])
        # 只有执行到以下raise才会抛出异常,如需使用raise,最好放在if语句中判断为异常
        raise Exception("抛出异常")
    except Exception as e:
        print(e)
        # 下面直接一句,raise,会让程序终止
        # raise


# 捕获多个异常
def except_test5():
    a = [1, 2, 3, 4]
    try:
        print(a[10])
    except IndexError:
        print('异常1:下标错误')
    except TypeError as e:
        print('异常1:', e)

    b = (1, 2, 3)
    try:
        print(b - 5)
    # 元祖指定多个异常类,捕获多个已知的异常
    except (TypeError, ValueError) as e:
        print('异常2:', e)


# assert抛出异常
def assert_emp():
    x = 101
    print(x)
    # 设置断言,判断为false抛出异常,会终止程序运行
    assert x < 100, 'x不能超过100'
    print('x<=100')


# 自定义异常需要继承父类Exception
class MyExcept(Exception):
    def __init__(self, error):
        self.error = error

    # 此处可缺省
    # def __str__(self):
    #     return repr(self.error)




# 自定义异常测试
def myExceptionTest():
    try:
        s = input("请输入:")
        if not s.isdigit():
            # 运行到raise时,会直接跳到except处执行
            raise MyExcept("输入的不是数字")
        print('ok')
    except MyExcept as e:
        print('自定义异常:', e)


if __name__ == "__main__":
    # except_test1()
    # except_test2()
    # except_test3()
    # except_test4()
    # except_test5()
    # assert_emp()
    myExceptionTest()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值