hyl_0718 发表于 2020-8-12 16:56:36

为什么只能捕获一个异常?

try:   
    sum=1+'1'
    f=open('我是一个不存在的文档.txt')
    print(f.read())
    f.close()
except OSError as reason:
    print('文件出错啦T_T\n错误原因是:'+str(reason))
except TypeError as reason:
    print('类型出错了\n错误原因是:'+str(reason))

运行结果:
类型出错了
错误原因是:unsupported operand type(s) for +: 'int' and 'str'

zltzlt 发表于 2020-8-12 16:58:55

我这里没有报错啊,是不是你自己操作错误了?

sunrise085 发表于 2020-8-12 17:01:22

你的程序执行到:sum=1+'1' 的时候就会抛出异常,然后被except TYPError捕获,然后程序就结束了。
根本不会执行到:f=open('我是一个不存在的文档.txt')

hyl_0718 发表于 2020-8-19 15:09:50

sunrise085 发表于 2020-8-12 17:01
你的程序执行到:sum=1+'1' 的时候就会抛出异常,然后被except TYPError捕获,然后程序就结束了。
根本不 ...

这段小程序是‘第33课 033异常处理:你不可能总是对的2 ’ 里测试题2的答案,问题:一个try语句可以和多个except语句搭配吗?为什么?
答案:可以,附录的小程序即为问题,如下:
try:   
    sum=1+'1'
    f=open('我是一个不存在的文档.txt')
    print(f.read())
    f.close()
except OSError as reason:
    print('文件出错啦T_T\n错误原因是:'+str(reason))
except TypeError as reason:
    print('类型出错了\n错误原因是:'+str(reason))

答案错了吗?

hyl_0718 发表于 2020-8-19 15:11:49

zltzlt 发表于 2020-8-12 16:58
我这里没有报错啊,是不是你自己操作错误了?

没有操作错,就是这段程序,您复制后可以再试下

zltzlt 发表于 2020-8-19 15:13:18

hyl_0718 发表于 2020-8-19 15:11
没有操作错,就是这段程序,您复制后可以再试下

我重新复制又重试了一下,代码确实没有报错,执行结果是:类型出错了
错误原因是:unsupported operand type(s) for +: 'int' and 'str'

你用的 Python 是什么版本的?会不会跟这个有关系

sunrise085 发表于 2020-8-19 22:28:58

本帖最后由 sunrise085 于 2020-8-20 10:37 编辑

hyl_0718 发表于 2020-8-19 15:09
这段小程序是‘第33课 033异常处理:你不可能总是对的2 ’ 里测试题2的答案,问题:一个try语句可以和 ...

答案没错。
你应该是理解错了
一个try可以搭配多个except,用于捕获多种异常,但是请注意不是同时捕获多种异常
因为遇到一个异常就会抛出异常,一旦抛出异常就会进入下面的多个except去试探,是哪一种异常就会被哪一个except捕获,若有匹配的就会进入except去处理该异常,若没有匹配的,那就会真的抛出异常,报错了。
因此,一个try只能被一个except捕获,,不管你写多少个except
这就像单选题,try的内容是题目,except是选项,可以有多个选项,但是只能选一个(except),具体选哪一个与题目(try 的内容)有关

陈尚涵 发表于 2020-8-20 10:33:21

sunrise085 发表于 2020-8-19 22:28
答案没错。
你应该是理解错了
一个try可以搭配多个except,用于捕获多种异常,但是请注意不是同时捕 ...

对呀,一次难道回报2个错???

hyl_0718 发表于 2020-8-20 14:58:48

zltzlt 发表于 2020-8-19 15:13
我重新复制又重试了一下,代码确实没有报错,执行结果是:

你用的 Python 是什么版本的?会不会跟这个 ...

这个版本:Python 3.7.2

hyl_0718 发表于 2020-8-20 17:04:07

sunrise085 发表于 2020-8-19 22:28
答案没错。
你应该是理解错了
一个try可以搭配多个except,用于捕获多种异常,但是请注意不是同时捕 ...

谢谢您的答复,我还是有疑问,答案是这么写的:
可以。因为try语句块中可能出现多类异常,利用except语句可以分别捕获并处理我们感兴趣的异常。
按您的说法,只能捕获try内容里的第一个写进except捕获的异常,那又怎么算分别捕获呀,只能捕获一个异常,答案同时写多个except语句也没有意义呀,捕获一个就退出了,这不是答案错误吗?

sunrise085 发表于 2020-8-20 17:16:24

hyl_0718 发表于 2020-8-20 17:04
谢谢您的答复,我还是有疑问,答案是这么写的:
可以。因为try语句块中可能出现多类异常,利用except语 ...

答案没错啊
这个的确是分别捕获不同的异常,,这里所谓的分别捕获就是根据上面抛出的异常类型,在下面执行不同的except语句,若下面只有一个except,而没有给出错误类型(OSError、TypeError),那就是全部捕获各种异常。
try语句块中的程序也是正常顺序执行的,遇到错误就会抛出异常,不可能是把try执行完之后,再抛出所遇到的各个异常。只能是遇到第一个异常就抛出异常进入except部分
页: [1]
查看完整版本: 为什么只能捕获一个异常?