【问题标题】:I need a hint how to sorted out this error我需要提示如何解决此错误
【发布时间】:2018-08-15 19:19:44
【问题描述】:

我有这个代码:

qcmz = session1.query(func.sum(KCom.c1)).filter(KCom.users_id != current_user.id and KCom.ofv_id == cmz_id).all()
    qcmz1 = np.array(qcmz) + 0. 
    qcmz2 = float(qcmz1[0])
    qcmz3 = float("{0:.2g}".format(qcmz2))

并且正在返回此错误:

Traceback (most recent call last):
  File "/home/ubuntu/workspace/avb/venv/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/ubuntu/workspace/avb/venv/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/ubuntu/workspace/avb/venv/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/ubuntu/workspace/avb/venv/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/home/ubuntu/workspace/avb/venv/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/ubuntu/workspace/avb/venv/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/ubuntu/workspace/avb/venv/lib/python3.6/site-packages/flask_login/utils.py", line 228, in decorated_view
    return func(*args, **kwargs)
  File "/home/ubuntu/workspace/avb/app.py", line 822, in fcmz
    qcmz1 = np.array(qcmz) + 0. 
TypeError: unsupported operand type(s) for +: 'NoneType' and 'float'

想法是当 db 表被填充时,只有在为空时才返回任何错误,我的意思是当 KCom.c1 通过 ForeignKey 关联到另一个并且为空时返回此问题。

【问题讨论】:

  • KCom.users_id != current_user.id and KCom.ofv_id == cmz_id 没有按照您的想法进行操作:stackoverflow.com/questions/42681231/…,但这可能不是您的错误的根源,而是另一个错误。
  • qcmz object dtype 是否包含一个或多个 None 元素?
  • 是的,它是带有 None 元素的 qcmz dtype,但我会向您解释 qcmz 它是与订单相关的数量,如果订单还没有,那么当订单为 qcmz 时它的值是 None获得价值,我必须将 None 转换为 0(零)才能不出现此错误

标签: python numpy sqlalchemy


【解决方案1】:

您在代码中使用 + 操作数的唯一位置是以下行:

qcmz1 = np.array(qcmz) + 0. 

qcmz 看起来像什么,您想通过添加 + 0. 来实现什么?看起来 np.array(qcmz) 有时是 None 类型,您不能添加数字。

【讨论】:

  • 正在从由 users_id 关联到每一行的 KCOM.c1 中获取变量 c1 的总和,这是当 None 为 0(零)以不返回错误时的想法。
  • 所以你想用 0 替换数组中的所有 None 值?你会这样做:qcmz = [qcmz == None] = 0.0。然后你需要像这样qcmz.astype(float) 将类型转换为float
  • 感谢您的回答,但我正在寻找解决方案。感谢大家的支持!
【解决方案2】:

现在运行良好:

qcmz = session1.query(func.sum(KCom.c1)).filter(KCom.users_id != current_user.id and KCom.ofv_id == cmz_id).all()
    qcmz0 = np.array(qcmz)
    if qcmz0 == None:
        qcmz3 = 0
    else:
        qcmz1 = qcmz0 + 0. # conversia din list in float cu numpy
        qcmz2 = float(qcmz1[0])
        qcmz3 = float("{0:.2g}".format(qcmz2))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2023-02-21
    • 2021-12-11
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多