py的缺陷吗——try...except,except里只要有对应第一个try的错误就行了吗?也就是忽视了其他的try错

awaken_ 发布于 2017/02/15 17:18
阅读 271
收藏 0

try:

f = open('我为什么是一个文件.txt')  #这个txt并不存在
print(f.read())
f.close()
sum=1+'1'      #文件类型出错

except TypeError as reason:

print('类型出错啦\n错误的原因是:'+str(reason))

except OSError as reason:

print('文件出错了\n错误的原因是:'+str(reason))

如果去掉这两行

except OSError as reason:

print('文件出错了\n错误的原因是:'+str(reason))

会报错

Traceback (most recent call last):
  File "E:/PyCharm 2016.3.2/untitled3/guessing/test01.py", line 2, in <module>
    f = open('我为什么是一个文件.txt')  #这个txt并不存在
FileNotFoundError: [Errno 2] No such file or directory: '我为什么是一个文件.txt'

而如果去掉

except TypeError as reason:

print('类型出错啦\n错误的原因是:'+str(reason))

则不会报错,也就是说忽视了sum=1+‘1’的错误,这个是缺陷吗还是什么,麻烦大咖 解释下

加载中
0
Lin_R
Lin_R

 

try:
    ..
except IOError:
    pass

except ZeroDivisionError:
    pass
...

exception 后面如果接具体的异常类型, 则代表捕获指定异常,如果后面没有接具体的异常类型, 则代表捕获所有可以捕获的异常

所以多句 except Exception, 那么代表是根据不同的异常, 执行不同的指令

你的问题是: 因为open()打开一个不存在的文件, 触发了OSError异常,  而这个异常被你下面语句捕获, 所以没有报错

except OSError as reason:
    print('文件出错了\n错误的原因是:'+str(reason))

当你去掉这句异常捕获代码, 触发的OSError异常没有被程序捕获, 则报错返回

返回顶部
顶部