为什么这个`try`语句不能捕获这个`CannotSendRequest`错误?蟒蛇

时间:2014-08-08 01:23:29

标签: python try-catch bitcoin httplib

try:
    serial_tx = bcl.sendrawtransaction(tx)
except:
    raise
    ''other stuff''

括号中的tx是即将广播到网络的原始事务。 这是结果 -

Internal Server Error: /blockscript/0d82f8c8f85ed2b8226dd98ad967c81b00000000000074cfc81b5e3cfdef19975408ef2c2d9976160c69dd2057505d5a/
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 114, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/media/derrend/data/Development/projectone/pro1/views.py", line 1012, in blockscript
    process_rec(tx, L_dct=L_dct, W_dct=W_dct)
  File "/media/derrend/data/Development/projectone/pro1/views.py", line 494, in process_rec
    serial_tx = bcl.sendrawtransaction(tx)
  File "/usr/local/lib/python2.7/dist-packages/python_bitcoinlib-0.2_SNAPSHOT-py2.7.egg/bitcoin/rpc.py", line 403, in sendrawtransaction
    r = self._call('sendrawtransaction', hextx)
  File "/usr/local/lib/python2.7/dist-packages/python_bitcoinlib-0.2_SNAPSHOT-py2.7.egg/bitcoin/rpc.py", line 163, in _call
    'Content-type': 'application/json'})
  File "/usr/lib/python2.7/httplib.py", line 973, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1001, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/lib/python2.7/httplib.py", line 871, in putrequest
    raise CannotSendRequest()
CannotSendRequest

提前致谢:)

编辑:

我最初为了论坛而缩短了错误,但我现在已经用完整的错误输出更新了它。再次感谢:)

EDIT2:

我刚看到try语句中有一个加注,我已将其添加到上面的主帖中。通常由此报告的错误是'加注不能是无'或者那种效果,但这不是我现在看到的。我会提到虽然我认为它是以某种方式重新发明。

1 个答案:

答案 0 :(得分:2)

raise自己重新引发一个捕获的异常,保留其堆栈跟踪。如果您不希望传播异常,请删除raise

您在问题中描述的内容仅在没有处理异常且仅在Python 2中使用裸raise时出现:

  

通常,由此报告的错误是'加注不能为无'或类似的结果

确切的错误是:

  

TypeError:exception必须是旧式类或派生自BaseException,而不是NoneTyp   ë

。在Python 3中,它更具体:

  

RuntimeError:没有活动例外来重新加载

...但同样,这绝不应该适用于except块。