Python 程序报错处理问题

2017-07-20 10:14:21 +08:00
 xiaomacai

如果一段程序可能出错就用 try except Exception 处理是不是一个好的办法,如果不是那么如何处理更优一些? 如:

try:

    ********

except Exception, e:

    print e

    continue
2337 次点击
所在节点    Python
10 条回复
lxml
2017-07-20 10:58:13 +08:00
个人理解,预判可能出现错误 try except 是一个好办法,对错误处理区别处理才是个问题,原则性错误还是方向性错误,有的错误(比如网络)不影响直接 pass 掉重试就可以了,但比如用户输入错误这个不可接受的就得 raise 抛出。
widewing
2017-07-20 11:10:11 +08:00
除非你是框架,否则只处理明确定义的异常,不要处理 exception
fisher335
2017-07-20 11:22:54 +08:00
因为 try 里面会有很多信用的包,你这么写会吞掉保存!我比较反感动不动就 try 的。我认为在必要的时候用,不要动不动就 try
guyskk
2017-07-20 11:35:57 +08:00
捕获异常一定要明白自己的目的!我见过很多不知道为啥报错,直接就 try except 然后返回个错误信息 '出现错误',用户心里肯定一万个草泥马:你倒是告诉我出啥错了呀?

这种处理对用户没有任何帮助,开发者也非常难排查错误。更好的处理方式:
1. 让它报错
2. 程序入口统一处理这类异常,比如发送到 sentry,或者记录日志并提示用户发送错误日志
mansur
2017-07-20 11:36:58 +08:00
@fi traceback.print_exc() 就不会被吞掉了
mansur
2017-07-20 11:37:26 +08:00
@fisher335 traceback.print_exc() 就不会被吞掉了
CryMeatel
2017-07-20 11:42:21 +08:00
logger.exception('xxx')
wyntergreg
2017-07-20 15:39:57 +08:00
except Exception 是最后用的
前边应该 except 各种 Exception
hugo775128583
2017-07-20 15:47:15 +08:00
既然知道可能出错,为什么不能确定他会出什么错,然后修复或者是 catch。直接 Exception 不够妥当
hagezhou
2017-07-20 17:08:37 +08:00
如果看到源码或者一些框架,他们习惯于在内部都用 raise,可以用 puthon 自带的错误类型,也可以自己封装,try 在最外层,这样方便统一处理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/376588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX