用户自定义异常问题

3 投票
3 回答
785 浏览
提问于 2025-04-16 08:47

我有一个异常类

class Value(Exception):
    def __init__(self,val):
        self.val = val

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

raise Value('4')

这个异常的表现形式是

Traceback (most recent call last):
File "<module1>", line 20, in <module>
Value: '4'

------------------------------------更新------

我发现了一个拼写错误,感谢mark的帮助……但我现在的问题是,如果我想在错误信息中显示数字4和字符串“hello”,该怎么做……

非常感谢

3 个回答

0

我现在的问题是,比如我想显示数字4和字符串hello,还有错误信息,我该怎么做……

你应该把你的代码放在一个try/except的结构里,这样可以处理异常(错误)。下面是一个例子:

try:
    if something:
       raise Value('4')
    # do something else here
except Value as valueException:
    print "Hello, it raises an Value exception '%s'" % valueException.message
0
>>> class Value(Exception):
 def __init__(self, val):
  self.val = val
 def __repr__(self):
  return ' ,'.join(str(x) for x in self.val) + ' hello world!'
 def __str__(self):
  return repr(self)

当然,你可以在init里面做任何你想做的事情……比如用*val这个语法(而不是在init里用val)来使用你在例子中展示的Value类,然后简单地调用

Value(4, 2)或者Value(4)等等……

编辑:

在repr里只需返回self.msg……

def __repr__(self):
    return self.val + self.msg #or whatever you want

我之前的例子展示了如何接受和打印多个值……如果你只想要一个值和一个消息,并且想要显示它们,你可以这样做:

class Value(Exception):
    def __init__(self, val, msg):
        self.val = val
        self.msg = msg
    def __repr__(self):
        return 'Error code: %s  Error message: %s' % (self.val, self.msg)
    def __str__(self):
        return repr(self)
2

我想你这里应该写的是 val 而不是 value

def __str__(self):
    return repr(self.val) # <--- not self.value

如果想显示多个值,我推荐使用 str.format(需要 Python 2.6 或更新的版本)。下面是一个例子:

def __str__(self):
    return "Hello: {0}".format(self.val)

另一个例子:

def __str__(self):
    return "val1 = {}, val2 = {}".format(self.val1, self.val2)

撰写回答