Web2Py 错误 - TypeError:+ 不支持的操作数类型:“NoneType”和“str”

问题描述 投票:0回答:2

当我尝试运行 Web2Py 代码时出现错误。

基本上我们必须编写一个函数来查询数据库并显示可用的航班。

函数定义如下:

def searchFlights():
    return dict()

def show():
    receivedFlights = request.vars.originCity+','+request.vars.destCity+','+request.vars.type+','+request.vars.deptDate+','+request.vars.arrivalDate+','+request.vars.vlassType+','+request.vars.noOfAdults+','+request.vars.noOfChildren+','+request.vars.noOfInfants
    return dict(txt1=recievedflights, flights=db().select(db.Flight.request.originCity+','+request.vars.destCity+','+request.vars.type+','+request.vars.deptDate+','+request.vars.arrivalDate+','+request.vars.classType+','+request.vars.noOfAdults+','+request.vars.noOfChildren+','+request.vars.noOfInfants)) 

我们现在遇到的错误是:

  File "K:/wdd-softw/web2py/applications/Assignment/controllers/default.py", line 106, in show
    receivedFlights = request.vars.originCity+','+request.vars.destCity+','+request.vars.type+','+request.vars.deptDate+','+request.vars.arrivalDate+','+request.vars.vlassType+','+request.vars.noOfAdults+','+request.vars.noOfChildren+','+request.vars.noOfInfants
  TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
web2py
2个回答
2
投票

第一个问题是,当带有表单的页面首次加载时,没有提交任何内容,因此

request.vars
为空,因此每个
request.vars.some_var
返回 None。相反,你可以这样做:

receivedFlights = ', '.join(request.vars.values()) if request.vars else 'Empty'

您的数据库选择也会遇到同样的问题——您应该只在 request.vars 存在时运行查询。此外,您的查询不正确 - 您不能简单地将所有值连接成一个字符串并将其放入

select()
中。我建议您阅读有关 DAL 的章节以了解正确的查询语法。它应该看起来更像:

db((db.Flight.originCity == request.vars.originCity) &
   (db.Flight.destCity == request.vars.destCity) &
   ...).select()

最后,您可以简化查询构造,如建议这里

query = reduce(lambda a, b: (a & b),
    (db.mytable[v] == request.vars[v] for v in request.vars if v != None))

0
投票

使用 ...+str(request.vars.noOfAdults)+... 将数字字段转换为字符串。

© www.soinside.com 2019 - 2024. All rights reserved.