鱼C论坛

 找回密码
 立即注册
查看: 1991|回复: 10

[已解决]为什么只能捕获一个异常?

[复制链接]
发表于 2020-8-12 16:56:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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'
最佳答案
2020-8-20 17:16:24
hyl_0718 发表于 2020-8-20 17:04
谢谢您的答复,我还是有疑问,答案是这么写的:
可以。因为try语句块中可能出现多类异常,利用except语 ...

答案没错啊
这个的确是分别捕获不同的异常,,这里所谓的分别捕获就是根据上面抛出的异常类型,在下面执行不同的except语句,若下面只有一个except,而没有给出错误类型(OSError、TypeError),那就是全部捕获各种异常。
try语句块中的程序也是正常顺序执行的,遇到错误就会抛出异常,不可能是把try执行完之后,再抛出所遇到的各个异常。只能是遇到第一个异常就抛出异常进入except部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-12 16:58:55 | 显示全部楼层
我这里没有报错啊,是不是你自己操作错误了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-12 17:01:22 | 显示全部楼层
你的程序执行到:sum=1+'1' 的时候就会抛出异常,然后被except TYPError捕获,然后程序就结束了。
根本不会执行到:f=open('我是一个不存在的文档.txt')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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))

答案错了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-19 15:11:49 | 显示全部楼层
zltzlt 发表于 2020-8-12 16:58
我这里没有报错啊,是不是你自己操作错误了?

没有操作错,就是这段程序,您复制后可以再试下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-19 15:13:18 | 显示全部楼层
hyl_0718 发表于 2020-8-19 15:11
没有操作错,就是这段程序,您复制后可以再试下

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

你用的 Python 是什么版本的?会不会跟这个有关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 的内容)有关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

对呀,一次难道回报2个错???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-20 14:58:48 | 显示全部楼层
zltzlt 发表于 2020-8-19 15:13
我重新复制又重试了一下,代码确实没有报错,执行结果是:

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

这个版本:Python 3.7.2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-20 17:04:07 | 显示全部楼层
sunrise085 发表于 2020-8-19 22:28
答案没错。
你应该是理解错了
一个try可以搭配多个except,用于捕获多种异常,但是请注意不是同时捕 ...

谢谢您的答复,我还是有疑问,答案是这么写的:
可以。因为try语句块中可能出现多类异常,利用except语句可以分别捕获并处理我们感兴趣的异常。
按您的说法,只能捕获try内容里的第一个写进except捕获的异常,那又怎么算分别捕获呀,只能捕获一个异常,答案同时写多个except语句也没有意义呀,捕获一个就退出了,这不是答案错误吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

答案没错啊
这个的确是分别捕获不同的异常,,这里所谓的分别捕获就是根据上面抛出的异常类型,在下面执行不同的except语句,若下面只有一个except,而没有给出错误类型(OSError、TypeError),那就是全部捕获各种异常。
try语句块中的程序也是正常顺序执行的,遇到错误就会抛出异常,不可能是把try执行完之后,再抛出所遇到的各个异常。只能是遇到第一个异常就抛出异常进入except部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 07:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表