Python3中raise用法

      Python中raise语句支持强制触发指定的异常

      raise语法:

raise [EXPRESSION [from EXPRESSION]]

      如果raise后未跟表达式(expression),则raise重新引发当前作用域中活动的最后一个异常。如果当前范围内没有异常处于活动状态,则会引发RuntimeError异常,表明这是一个错误。否则,raise将第一个表达式作为异常对象,它必须是派生自Exception的异常类或异常实例。如果是异常类,则在需要时将通过调用不带参数的构造函数来隐式实例化。

      异常的类型是异常实例的类,值是实例本身。

      如果只想判断是否触发了异常,但并不打算处理该异常,则可以使用更简单的不带表达式的raise语句。

      from子句用于异常链:如果给定,第二个表达式必须是另一个异常类或实例。如果第二个表达式是异常实例,它将作为__cause__属性(可写)附加到引发的异常。如果表达式是异常类,则该类将被实例化,并且生成的异常实例将作为__cause__属性附加到引发的异常。如果未处理引发的异常,则将打印两个异常。

      异常链在except或finally子句触发异常时自动生成。禁用异常链可使用:from None。

      以上内容主要翻译于:https://docs.python.org/3/reference/simple_stmts.html#the-raise-statement

      以下为测试代码:

var = 6
if var == 1:
    # 1: from子句如果未处理引发的异常,则将打印两个异常
    try:
        print(1/0)
    except Exception as exc:
        raise RuntimeError("Something bad happend") from exc
elif var == 2:
    # 2: 通过在from子句中指定None可以显式抑制异常链
    try:
        print(1/0)
    except:
        raise RuntimeError("Something bad happend") from None
elif var == 3:
    # 3: 如果只想知道某处是否抛出一个异常,并不想处理它,那么只需一个不带任何参数的raise语句即可
    raise # 默认触发RuntimeError异常
elif var == 4:
    # 4: Python中使用raise语句触发一个指定的异常,不带描述信息
    raise Exception
elif var == 5:
    # 5: Python中使用raise语句触发一个指定的异常,带描述信息
    raise Exception("var's value:{}".format(var))
elif var == 6:
    # 6: raise引发的异常由try except(else finally)来捕获并处理
    try:
        num = input("input a number:")
        if (not num.isdigit()):
            raise ValueError("num must be a number")
    except ValueError as err:
        print("excepition:", repr(err))

print("test finish")

      GitHubhttps://github.com/fengbingchun/Python_Test

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值