0

在可能使用参数运行或不使用debug参数运行的 CLI 应用程序中,我正在捕获异常并有选择地重新抛出它:

try:
    doSomething()
except Exception as e:
    if debug==True:
        raise Exception(str(e))

有趣的是,raise Exception()代码本身就是这样抛出的:

Traceback (most recent call last):
  File "./app.py", line 570, in getSomething
    raise Exception(str(e))
Exception: expected string or buffer

不会str(e)返回字符串?我只能想象它可能正在返回None,所以我尝试了一个将军Exception(如代码中所示),希望它永远不会是 None。为什么可能e不能castable to string

4

2 回答 2

4

我认为您误解了异常消息。

在您的doSomething中,引发异常,异常是expected string or buffer. 然后使用该字符串重新引发异常。而且你没有捕捉到这个异常。因此,解释器停止并打印消息。

>>> try:
...     raise Exception('expected string or buffer')
... except Exception as e:
...     raise Exception(str(e))
... 
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
Exception: expected string or buffer
>>> 
于 2013-07-21T13:26:51.203 回答
2

附带说明,如果您想重新引发异常,则可以使用独立raise语句执行此操作,这会引发最后引发的异常。这也将为您提供实际错误,而不仅仅是将消息传递给Exception.

try:
    doSomething()
except:  # except by itself catches any exception
         # better to except a specific error though
    if debug:  # use implicit truth check of `if`
        raise  # re-raise the caught exception

另外,请注意,所有内容都可以转换为字符串(除非您明确表示不能)。

于 2013-07-21T13:35:05.433 回答