jsonrpclib icon indicating copy to clipboard operation
jsonrpclib copied to clipboard

TypeError: 'NoneType' object is not subscriptable

Open guyco-redis opened this issue 3 years ago • 3 comments

Got the following traceback:

  File "/opt/redislabs/lib/python3.9/site-packages/jsonrpclib/jsonrpc.py", line 778, in __call__
    return self.__send(self.__name, kwargs)
  File "/opt/redislabs/lib/python3.9/site-packages/jsonrpclib/jsonrpc.py", line 652, in _request
    return response["result"]
TypeError: 'NoneType' object is not subscriptable

from what I could see ServerProxy._request performs self._run_request(request), which can return None, in which case check_for_errors returns the same None, and that is accessed.

guyco-redis avatar Oct 27 '22 13:10 guyco-redis

Hi,

Would you have a use case that generates that situation, in order to prepare a unit test?

According to the specification, all requests except notifications must return a response object.

As a result, it would be more helpful to raise a TypeError exception with a message indicating that the server returned an invalid response . What is your opinion on the matter?

Note: in the master branch of this project, the issue would be on line 632

tcalmant avatar Oct 27 '22 19:10 tcalmant

I have made an issue59 branch with an explicit error. Could you try if it fits your needs?

tcalmant avatar Oct 27 '22 19:10 tcalmant

Hi @tcalmant , unfortunately I don't have a use case that generates this bug, I only saw this traceback through production logs. Looking through _run_request which calls self.__transport.request, this might result by an error like errno.ECONNRESET, errno.ECONNABORTED or errno.EPIPE (which won't raise an exception)?

I think raising an informative TypeError should be good in this case

guyco-redis avatar Nov 01 '22 20:11 guyco-redis