为什么只能捕获一个异常?
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' 我这里没有报错啊,是不是你自己操作错误了? 你的程序执行到:sum=1+'1' 的时候就会抛出异常,然后被except TYPError捕获,然后程序就结束了。
根本不会执行到:f=open('我是一个不存在的文档.txt') 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))
答案错了吗? zltzlt 发表于 2020-8-12 16:58
我这里没有报错啊,是不是你自己操作错误了?
没有操作错,就是这段程序,您复制后可以再试下 hyl_0718 发表于 2020-8-19 15:11
没有操作错,就是这段程序,您复制后可以再试下
我重新复制又重试了一下,代码确实没有报错,执行结果是:类型出错了
错误原因是:unsupported operand type(s) for +: 'int' and 'str'
你用的 Python 是什么版本的?会不会跟这个有关系 本帖最后由 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 的内容)有关 sunrise085 发表于 2020-8-19 22:28
答案没错。
你应该是理解错了
一个try可以搭配多个except,用于捕获多种异常,但是请注意不是同时捕 ...
对呀,一次难道回报2个错??? zltzlt 发表于 2020-8-19 15:13
我重新复制又重试了一下,代码确实没有报错,执行结果是:
你用的 Python 是什么版本的?会不会跟这个 ...
这个版本:Python 3.7.2 sunrise085 发表于 2020-8-19 22:28
答案没错。
你应该是理解错了
一个try可以搭配多个except,用于捕获多种异常,但是请注意不是同时捕 ...
谢谢您的答复,我还是有疑问,答案是这么写的:
可以。因为try语句块中可能出现多类异常,利用except语句可以分别捕获并处理我们感兴趣的异常。
按您的说法,只能捕获try内容里的第一个写进except捕获的异常,那又怎么算分别捕获呀,只能捕获一个异常,答案同时写多个except语句也没有意义呀,捕获一个就退出了,这不是答案错误吗? hyl_0718 发表于 2020-8-20 17:04
谢谢您的答复,我还是有疑问,答案是这么写的:
可以。因为try语句块中可能出现多类异常,利用except语 ...
答案没错啊
这个的确是分别捕获不同的异常,,这里所谓的分别捕获就是根据上面抛出的异常类型,在下面执行不同的except语句,若下面只有一个except,而没有给出错误类型(OSError、TypeError),那就是全部捕获各种异常。
try语句块中的程序也是正常顺序执行的,遇到错误就会抛出异常,不可能是把try执行完之后,再抛出所遇到的各个异常。只能是遇到第一个异常就抛出异常进入except部分
页:
[1]