为什么这不起作用?
try:
1/0
except ZeroDivisionError as e:
e.message += ', you fool!'
raise
Run Code Online (Sandbox Code Playgroud)
即使它仍在异常实例上,也不会使用修改后的消息.上面有一个工作模式吗?行为应该像我目前的解决方法如下:
try:
1/0
except ZeroDivisionError as e:
args = e.args
if not args:
arg0 = ''
else:
arg0 = args[0]
arg0 += ', you fool!'
e.args = (arg0,) + args[1:]
raise
Run Code Online (Sandbox Code Playgroud)
我知道python3中的异常链接,它看起来不错但很遗憾在python2中不起作用.那么在python2中重新引发异常的常用方法是什么?
注意:由于此处提到的警告和警告,我不想挖掘回溯并创建新的异常,而是重新引发现有的异常实例.
改变e.args是做到这一点的唯一方法。for 的实现BaseException.__str__只考虑args元组,根本不考虑message:
static PyObject *
BaseException_str(PyBaseExceptionObject *self)
{
PyObject *out;
switch (PyTuple_GET_SIZE(self->args)) {
case 0:
out = PyString_FromString("");
break;
case 1:
out = PyObject_Str(PyTuple_GET_ITEM(self->args, 0));
break;
default:
out = PyObject_Str(self->args);
break;
}
return out;
}
Run Code Online (Sandbox Code Playgroud)
这应该不会太意外,因为自 Python 2.6 以来BaseException.message已弃用。
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |