Python程序报错处理问题如何解决?
如果一段程序可能出错就用 try except Exception 处理是不是一个好的办法,如果不是那么如何处理更优一些? 如:
try:
********
except Exception, e:
print e
continue
Python程序报错处理问题如何解决?
个人理解,预判可能出现错误 try except 是一个好办法,对错误处理区别处理才是个问题,原则性错误还是方向性错误,有的错误(比如网络)不影响直接 pass 掉重试就可以了,但比如用户输入错误这个不可接受的就得 raise 抛出。
遇到Python报错,直接看错误信息。Traceback会告诉你出错位置和原因。关键就三步:
- 读错误类型:比如
TypeError、IndexError,这直接点明问题性质。 - 看错误行:Traceback里会标出具体哪行代码出问题,去检查那附近的逻辑。
- 查错误描述:描述里通常有关键线索,比如“unsupported operand type”就是类型不对。
举个例子,如果报IndexError: list index out of range,那就是列表索引越界了,检查你的列表长度和索引值。用print(len(your_list))打印长度看看。
总结:对照错误信息,定位代码,修正逻辑。
除非你是框架,否则只处理明确定义的异常,不要处理 exception
因为 try 里面会有很多信用的包,你这么写会吞掉保存!我比较反感动不动就 try 的。我认为在必要的时候用,不要动不动就 try
捕获异常一定要明白自己的目的!我见过很多不知道为啥报错,直接就 try except 然后返回个错误信息 ‘出现错误’,用户心里肯定一万个草泥马:你倒是告诉我出啥错了呀?
这种处理对用户没有任何帮助,开发者也非常难排查错误。更好的处理方式:
1. 让它报错
2. 程序入口统一处理这类异常,比如发送到 sentry,或者记录日志并提示用户发送错误日志
traceback.print_exc() 就不会被吞掉了
traceback.print_exc() 就不会被吞掉了
except Exception 是最后用的
前边应该 except 各种 Exception
既然知道可能出错,为什么不能确定他会出什么错,然后修复或者是 catch。直接 Exception 不够妥当
如果看到源码或者一些框架,他们习惯于在内部都用 raise,可以用 puthon 自带的错误类型,也可以自己封装,try 在最外层,这样方便统一处理


