这是定义和使用Python异常的合适方法吗?

时间:2011-08-29 15:28:06

标签: python exception

我只是想确保我以正确的“pythonic”方式执行此操作 - 我想确保我已正确定义 - 并且正在使用 - 此异常类。特别是eval(repr())逻辑 - 它主要是为了清洁,我理解为什么你最后用字符串repr()返回引号,但我不想记录它们。

class IPCClientError(Exception):
    """ General IPC Client Exception class """
    def __init__(self, value = "Unspecified error"):
        self.val = value + ", see IPC client log for details."

    def __str__(self):
        return eval(repr(self.val))

当我提出异常时,我会使用类似的东西:

raise IPCClientError("Socket error")

然后调用方法将具有以下内容:

except IPCClientError, exc:
    self.log.error(str(exc))
    return ERROR

2 个答案:

答案 0 :(得分:4)

eval(repr(self.val))
Eek,你想在这里完成什么?是不是self.val已经应该是一个字符串?

避免repr引用的引号的方法不是首先使用它。

如果你担心传递给构造函数的值不是字符串,那么 - 无论如何都会在构造函数中失败(unicode狡辩),你只需要{{1在您的自定义异常可以之前引发。

至于你如何处理异常,异常处理是一种艺术,而且真的不是这个空间可以涵盖的东西......

答案 1 :(得分:2)

(除了其他人已经提到的eval内容)

在你的except语句中,你应该写except IPCClientError as exc:(注意“as”),这是较新的python 3兼容方式。 (另一种语法在python 3中不再起作用,新的在python 2.6及更高版本中工作)