免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2855 | 回复: 3
打印 上一主题 下一主题

使用json时出现UnboundLocalError 错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-21 11:13 |只看该作者 |倒序浏览
本帖最后由 eveson 于 2015-01-21 11:15 编辑

问题:
直接调用
  1. self.rpc({"jsonrpc": "2.0", "method": "test", "params": [123], "id": 1})
复制代码
就没有问题
如果换成变量self.rpc(recvstr)  就会抛出异常
代码:
  1. def test(num):
  2.    str = {"FunId":1, "Stat":0, "param":num}
  3.    print(str)
  4.    return str

  5. global recvstr
  6. class MyServerProtocol(WebSocketServerProtocol):
  7.    def __init__(self):
  8.       self.rpc = JsonRpc()
  9.       self.rpc['test'] = test
  10.           
  11.    def onConnect(self, request):
  12.       print("Client connecting: {0}".format(request.peer))

  13.    def onOpen(self):
  14.       print("WebSocket connection open.")

  15.    def onMessage(self, payload, isBinary):
  16.       if isBinary:
  17.          print("Binary message received: {0} bytes".format(len(payload)))
  18.       else:
  19.          recvstr = format(payload.decode('utf8'))
  20.          print("Text message received:",recvstr)
  21.          self.rpc(recvstr)
  22.          #self.rpc({"jsonrpc": "2.0", "method": "test", "params": [123], "id": 1})
  23.       ## echo back message verbatim
  24.       self.sendMessage(payload, isBinary)

  25.    def onClose(self, wasClean, code, reason):
  26.       print("WebSocket connection closed: {0}".format(reason))
复制代码
错误:
  1. Text message received: {"method": "test", "params": [123], "id": 1, "jsonrpc": "2.0"}
  2. Exception in callback WebSocketAdapterProtocol._consume.<locals>.process(<Future finished result=None>) at /usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/asyncio/websocket.py:94
  3. handle: <Handle WebSocketAdapterProtocol._consume.<locals>.process(<Future finished result=None>) at /usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/asyncio/websocket.py:94>
  4. Traceback (most recent call last):
  5.   File "/usr/local/lib/python3.4/asyncio/events.py", line 119, in _run
  6.     self._callback(*self._args)
  7.   File "/usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/asyncio/websocket.py", line 98, in process
  8.     self._dataReceived(data)
  9.   File "/usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/websocket/protocol.py", line 1328, in _dataReceived
  10.     self.consumeData()
  11.   File "/usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/websocket/protocol.py", line 1344, in consumeData
  12.     while self.processData() and self.state != WebSocketProtocol.STATE_CLOSED:
  13.   File "/usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/websocket/protocol.py", line 1503, in processData
  14.     return self.processDataHybi()
  15.   File "/usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/websocket/protocol.py", line 1817, in processDataHybi
  16.     fr = self.onFrameEnd()
  17.   File "/usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/websocket/protocol.py", line 1947, in onFrameEnd
  18.     self._onMessageEnd()
  19.   File "/usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/asyncio/websocket.py", line 154, in _onMessageEnd
  20.     res = self.onMessageEnd()
  21.   File "/usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/websocket/protocol.py", line 743, in onMessageEnd
  22.     self._onMessage(payload, self.message_is_binary)
  23.   File "/usr/local/lib/python3.4/site-packages/autobahn-0.9.5-py3.4.egg/autobahn/asyncio/websocket.py", line 160, in _onMessage
  24.     res = self.onMessage(payload, isBinary)
  25.   File "server.py", line 46, in onMessage
  26.     self.rpc(recvstr)
  27.   File "/usr/local/lib/python3.4/site-packages/jsonrpc2-0.4.1-py3.4.egg/jsonrpc2/__init__.py", line 206, in __call__
  28.     return resdata
  29. UnboundLocalError: local variable 'resdata' referenced before assignment
复制代码

论坛徽章:
0
2 [报告]
发表于 2015-01-21 11:29 |只看该作者
请高手给看下怎么回事,搞了一上午了,哎,python用的不熟啊

论坛徽章:
1
子鼠
日期:2014-05-04 13:59:31
3 [报告]
发表于 2015-01-21 14:34 |只看该作者
你测试的参数和运行是的参数 recvstr  数据类型不是一样的
recvstr.__class___ 看下

论坛徽章:
0
4 [报告]
发表于 2015-01-21 16:12 |只看该作者
解决了。追到库jsonrpc的源码里面,找了个他自己使用的过程看了下,原来调用rpc之前必须json.loads一下。
C语言用惯了,什么事情,总想自己推理、实现,用python还是老老实实看api,看demo
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP