带有多个except 的try语句,处理多个异常的except语句

带有多个except的try 语句

>>> def self_float(obj):
    try:
        return float(obj)
    except ValueError:
        retval = none
    return retval

>>> self_float(1234)
1234.0


>>> def self_float(obj):
    try:
        return float(obj)
    except ValueError:
        retval = 'could not convert non-number to float'
    return retval

>>> self_float(1234)
1234.0

>>> self_float("foo")
'could not convert non-number to float'


改造之后的的函数,我们已经可以探测到非法的字符串输入了,可如果传递一个非法的对象,还是会受伤。

>>> self_float(foo)
Traceback (most recent call last):
  File "<pyshell#112>", line 1, in <module>
    self_float(foo)
NameError: name 'foo' is not defined


此时需要多个except语句,每个except语句对应一种异常类型。

>>> def safe_float(obj):
    try:
        return float(obj)
    except ValueError:
        retval = 'could not convert non-number to float'
    except TypeError:
        retval = 'object type cannot be converted to float'
    return retval

>>> safe_float(())
'object type cannot be converted to float'
>>> safe_float('sd1')
'could not convert non-number to float'


处理多个异常的except语句:

我们还可以在一个except语句里处理多个异常。except语句在处理多个异常时要求异常被放在一个元组里。

改进上述函数,要求所有异常必须使用同样的代码处理

>>> def safe_float(obj):
    try:
        return float(obj)
    except (ValueError,NameError,TypeError):
        retval = 'object type cannot be converted to float'
    return retval

>>> safe_float(())
'object type cannot be converted to float'
>>> safe_float("123")
123.0
>>> safe_float('123e')
'object type cannot be converted to float'




  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
是的,一个 `try` 语句可以对应多个 `except` 子句,每个 `except` 子句用于捕获不同类型的异常。这种用法被称为多重异常处理,可以让程序更加灵活地处理不同类型的异常。语法格式如下: ``` try: # 可能引发异常语句 except ExceptionType1: # 处理 ExceptionType1 类型的异常 except ExceptionType2: # 处理 ExceptionType2 类型的异常 ... except ExceptionTypeN: # 处理 ExceptionTypeN 类型的异常 else: # 当没有异常发生时执行的代码 finally: # 无论是否发生异常都会执行的代码 ``` 在这个语法中,`try` 块中的语句可能会引发多种类型的异常,每个 `except` 子句用于捕获一种类型的异常处理它。如果 `try` 块中的语句引发了异常,会依次匹配每个 `except` 子句以查找与该异常类型匹配的子句。如果找到匹配的子句,则执行该子句中的代码,并跳过其他的子句。如果所有的子句都不匹配,则将异常向上传递到调用栈中的上一层代码中。如果 `try` 块中的语句没有引发异常,则会执行 `else` 块中的代码。`finally` 块中的代码无论是否发生异常都会执行。 下面是一个多重异常处理的示例,用于处理除数为零和索引越界的异常: ``` a = [1, 2, 3] try: b = a[3] / 0 except ZeroDivisionError: print('Division by zero.') except IndexError: print('Index out of range.') else: print('No exception occurred.') finally: print('The end.') ``` 在这个示例中,`a[3] / 0` 会引发除数为零的异常和索引越界的异常,`try` 块中的代码会依次匹配 `except` 子句以查找与异常类型匹配的子句,这里找到了匹配除数为零的子句,执行该子句中的代码,并跳过其他的子句。最后,程序执行 `finally` 块中的代码,输出结果为: ``` Division by zero. The end. ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值