-->

对于DynamoDB查询Python代码正在V3.6但是在Python 2.7不工作(Python

2019-09-27 15:19发布

我有boto3框架,我运行的Python 3.6的本地机器上工作的DynamoDB查询,但不是我的服务器上运行的Python 2.7。

我的本地机器上运行的代码:

dyndb = boto3.resource('dynamodb')
table = dyndb.Table('XXXXXXX')

response = table.query(
      IndexName = "XXX-XXX-index",
      ProjectionExpression = "AssessID,SNo,Details,Status,OTP",
      KeyConditionExpression = Key('OTP').eq(otp))

在服务器上运行的代码...

    global user_otp

         dyndb = boto3.resource('dynamodb')
         table = dyndb.Table('XXXXXX')

         otp = int(user_otp)

         print("converting string otp to int otp") # it is printed on console
         response = table.query(
                 IndexName = "XXX-XXX-index",
                 ProjectionExpression = "AssessID,SNo,Details,Status,OTP",
                 KeyConditionExpression = Key('OTP').eq(otp) & Key('SNo').between(1,5))

         print ("response code is executing file") # it is not printed on console

当我打印输出,所述第一印刷中示出但不包括表查询之后的第二打印。

我正在对全球指数这个查询与OTP作为分区键和SNo作为排序键。 我让我的本地机器上的结果,只有分区键,但不是我的服务器上,即使同时使用分区和排序键。

DynamoDB不会引发任何异常。 而不是我收到龙卷风的WebSocket例外。

control coming to process and response function
user otp mentioned is  3086and its type <type 'int'>
converting string otp to int otp

ERROR:tornado.application:Exception in callback <functools.partial object at 0x7f33b6ce7890>
Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/tornado/ioloop.py", line 758, in _run_callback
    ret = callback()
  File "/usr/lib64/python2.7/site-packages/tornado/stack_context.py", line 300, in null_wrapper
    return fn(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/tornado/ioloop.py", line 779, in _discard_future_result
    future.result()
  File "/usr/lib64/python2.7/site-packages/tornado/concurrent.py", line 261, in result
    raise_exc_info(self._exc_info)
  File "/usr/lib64/python2.7/site-packages/tornado/gen.py", line 1141, in run
    yielded = self.gen.throw(*exc_info)
  File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 888, in _receive_frame_loop
    yield self._receive_frame()
  File "/usr/lib64/python2.7/site-packages/tornado/gen.py", line 1133, in run
    value = future.result()
  File "/usr/lib64/python2.7/site-packages/tornado/concurrent.py", line 261, in result
    raise_exc_info(self._exc_info)
  File "/usr/lib64/python2.7/site-packages/tornado/gen.py", line 1147, in run
    yielded = self.gen.send(value)
  File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 975, in _receive_frame
    handled_future = self._handle_message(opcode, data)
  File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 1000, in _handle_message
    return self._run_callback(self.handler.on_message, decoded)
  File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 548, in _run_callback
    self.handler.log_exception(*sys.exc_info())
AttributeError: 'WebSocketClientConnection' object has no attribute 'log_exception'

Answer 1:

我认为“无属性log_exception”是龙卷风5的错误是固定在龙卷风6然而,龙卷风6只支持Python 3,所以在Python 2你的旧版本。

还有另一个错误在这里,但你不能看到它是什么,因为Python 2中的错误处理并不像Python 3中的一样好。 和错误显然不会对Python 3的出现如果你必须继续支持Python 2中,尝试添加一个try/except在你的身体块on_message回调(或使用read_message接口,而不是的on_message回调)。



文章来源: Python code for DynamoDB query is working on v3.6 but not working in python 2.7