扫码关注官方订阅号
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
如果用 try ... except 很可能会捕获到自己不想要的类型的异常,或自己不期望的函数抛出的异常。比如这样的代码:
try: f = open(...) # 在此期间又做了点别的 f.close() except OSError: ...
OSError 可能有自己不期待的异常类型,或者不是文件操作引起的异常。如果在 except 中处理不当,就会导致对应的异常没有得到正确处理,引起 bug。
try: # 我们想要的数据在 alist 中 data = alist[0] except IndexError: # ...但那数据也许并不存在 data = [] else: # 取得了数据,存放在 datalist 的第一位置,取代之前的旧数据 # 我知道之前一定是有旧数据的,否则这程序有 bug datalist[0] = data
随便写的,表达一下意思而已。
因为有些代码是不论异常有没有发生都要执行的。就和例子里的一样,不论文件是否打开,文件流都必须关闭,不然有可能发生后续访问的时候文件被占用这种很恶心的事情。而且你在捕获不同的异常的时候要是疯狂复制相同的善后代码的话,是违反DRY定理的。更重要的是,就算你没有写对应异常的catch块,else也会被执行,保证了安全性
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
如果用 try ... except 很可能会捕获到自己不想要的类型的异常,或自己不期望的函数抛出的异常。
比如这样的代码:
OSError 可能有自己不期待的异常类型,或者不是文件操作引起的异常。
如果在 except 中处理不当,就会导致对应的异常没有得到正确处理,引起 bug。
随便写的,表达一下意思而已。
因为有些代码是不论异常有没有发生都要执行的。就和例子里的一样,不论文件是否打开,文件流都必须关闭,不然有可能发生后续访问的时候文件被占用这种很恶心的事情。而且你在捕获不同的异常的时候要是疯狂复制相同的善后代码的话,是违反DRY定理的。更重要的是,就算你没有写对应异常的catch块,else也会被执行,保证了安全性