我有一个数据库访问模块,我用查询或命令调用。它计算出如何处理数据库,并试图做到这一点。但是,例如,如果查询或命令字符串是病态的,对底层PGDB模块的调用可能会引发异常。捕捉异常不会从异常中继承
一些令人难以置信的有用的信息由PGDB(从PostgreSQL下)返回,特别是调用查询或命令中发现的错误。这种PGDB的各种功能的使用检索信息:
try:
pgdb.dothing(mod.withx)
except Exception, e:
mod.error = 'pgdb.dothing('+str(type(mod.withx))+str(mod.withx)+') failed with: '+str(e)
那么当类的回报,已经失败,该对象包含.error和中提琴的消息,我可以解决我的查询或命令愚蠢。
而这一切似乎只是做工精细 - (在Python 2.2.2,这可能会改变哪天2.更高......但不是现在 - 而且从来不曾对无论发生什么)
但是......我发现这一点不透明:“异常不需要从Exception继承,因此除了''外,'除了'外,还捕获所有的异常,而不仅仅是系统,字符串异常是一个异常的例子, t从异常继承“
所以这里的问题是:为什么我关心?如果抛出异常,我想知道为什么。我不在乎它来自哪里,实际上,我只是想要错误信息,而且我确实不希望Python陷入停顿。这将包括如果错误来自字符串事物或其他。所以除了抓住一切都很好。或者它应该是。
是不是说Exception的参数意思是说,如果它来自于例如String内部,我不会发现一个错误?那么,代码将停止与未捕获的异常?那么为了获得我想要的行为,我需要一系列“不从异常继承”的类型的捕获?像这样的东西:
try:
pgdb.dothing(mod.withx)
except Exception, e:
mod.error = 'pgdb.dothing('+str(type(mod.withx))+str(mod.withx)+') failed with: '+str(e)
except:
mod.error = 'pgdb.dothing('+str(type(mod.withx))+str(mod.withx)+') failed with: WTF???'
...因为那真的......有点太烂了。
而且,如果是这样的话,是否还有其他方法可以捕获所有类型的所有异常,并为它们获取错误消息?看起来这将是一种高度,非常可取的事情(它也似乎是一个单行应该解决它,它应该看起来有点像前一个例子,而不是后者)。
请在之前你回答:是的,我知道Python 2.2.2是旧的。不,它不会很快升级。这是一个拥有数百万行代码的生产系统;它是稳定的,我们希望它保持这种状态,基于“没有破裂,没有修复”。
我只需要对这部分异常过程的打击深入了解。所有的解释似乎都在假设我所知道的......乐观。 :)
感谢您的任何见解。
“我也建议看看......”我做了。从上面的例外看起来像你的答案,在上面,做了我所问的问题,非常感谢你,另外,我不是在重写错误,我试图找出错误是什么,因为我'当这种情况发生的时候,我不会在那里,一般来说,我需要捕获这些信息并将其自己 - 至少以某种形式呈现给用户 - – fyngyrz 2014-12-03 21:43:05
@fyngyrz,不是问题,也没有任何意图,我只是喜欢链接如果我的回答对你有帮助,w呃不考虑打左边的复选标记? :-) – MeetTitan 2014-12-03 21:52:06