1

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:+のサポートされていないオペランドタイプ:'NoneType'および'str' **

4

2 に答える 2

2

最初の問題は、フォームを含むページが最初に読み込まれたときに何も送信されていないため、request.vars空であり、それぞれrequest.vars.some_varが None を返すことです。代わりに、次のようなことができます。

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

データベースの選択でも同じ問題が発生します。request.vars が存在する場合にのみクエリを実行する必要があります。さらに、クエリは正しくありません。すべての値を単純に連結して 1 つの文字列にし、それを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))
于 2013-01-15T16:13:06.507 に答える