我只是想确保我以正确的“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
答案 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及更高版本中工作)