为什么自定义异常字符串打印为数组?

时间:2017-03-11 18:32:46

标签: python exception

在Python 2.7.x中,我创建了一个Exception类:

class myException(RuntimeError):
  def __init__(self,arg):
    self.args = arg

当我使用它时:

try:
  raise myException("This is a test")
except myException as e:
  print e

打印出来像这样:

  

('T','h','我','s','','我','s'......)

我没有打印整个东西,但为什么不打印出来作为字符串?我该如何转换呢?

另外,为什么e.message空白?

2 个答案:

答案 0 :(得分:5)

args关于异常是特殊的;它希望是一个序列。将字符串分配给self.args是合法的,它是一个序列,但是当你这样做时它会被转换为元组。

分配包含您的参数的元组:

class myException(RuntimeError):
    def __init__(self, arg):
         self.args = (arg,)

请参阅BaseException documentation

  

<强> ARGS
  赋予异常构造函数的参数元组。一些内置异常(如IOError)期望一定数量的参数并为此元组的元素赋予特殊含义,而其他异常通常仅使用单个字符串调用给出错误消息。

答案 1 :(得分:1)

您所要做的就是:

class myException(RuntimeError):
  def __init__(self,arg):
    self.args = (arg,)