Python处理未知类型的优雅方式

2024-04-28 22:32:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我需要让同一段代码依赖于两个不同版本的PyGreSQL。问题是一个版本有一个异常错误(小写),而另一个版本有一个异常错误(大写)。我怎样才能优雅地处理这件事。如果我有:

try:
    do_something
except pg.error, x:
    print "Database connection error: ", x
except pg.Error, x:
    print "Database connection error: ", x

然后我总是遇到一个问题,当错误被抛出,因为它首先传递错误,错误是未知的。Python中有什么方法可以处理这个问题吗?你知道吗

我的意思是C++中有一个预处理器条件来处理它,但是在Python中我没有线索。你知道吗

这一切都是由于某个无限聪明的人在某个地方改变了版本之间的情况。你知道吗


Tags: 代码版本错误errorconnectiondodatabasesomething
3条回答

你可以这样说:

except getattr(pg, ("error", "Error")[hasattr(pg, "Error")]) as x:

它使用了方便的特性,其中真值是1,假值是0。这样,如果pg有一个名为Error的属性,它就使用getattr(pg, [("error", "Error")[1])),简化为getattr(pg, "Error")pg.Error。如果它没有这个属性,通过同样的简化我们可以看到它使用pg.error。你知道吗

在实际的try..catch之前通过实验确定异常类型:

try:
    exception_type = pg.error
except AttributeError:
    exception_type = pg.Error

try:
   ...
except exception_type:
   ...

您可以在导入过程中解决它,这也会简化代码:

import pg
try:
    pgError = pg.error
except AttributeError:
    pgError = pg.Error

之后:

try:
    ...
except pgError, e:
    print e

相关问题 更多 >