1

「または」がそのままの動作をしている理由がわからないようです。私は SQLAlchemy を使用してWTForms.ext.sqlalchemy.QuerySelectFieldおり、設定QuerySelectFieldすることもできますquery_factoryが、それがない場合はフィールドqueryメソッドにフォールバックする必要があります。

例えば

class Form1(Form):
    fielda = QuerySelectField('Field A')

query_factory次のように引数を設定することもできます。

class Form1(Form):
    fielda = QuerySelectField('Field A', query_factory=somefunction)

次に、他の場所で次のようにフォームを使用します。

form = Form1(request.form)
form.fielda.query = MyObjects.query.all()

私が見ているのはMyObjects.query.all()、空のリストを返す場合NoneType not callable、QuerySelectField _get_object_list() メソッドのこの行で例外が発生することです。

query = self.query or self.query_factory()

基本的に、 の値に関係なく、self.queryに割り当てられていてもorは呼び出します。self.query_factory()None

だから、私の質問は、これは期待される動作orですか? 両方を評価し最初の値がNone. これは正しいです?

4

3 に答える 3

1

or短絡。この意味は

query = self.query or self.query_factory()

次のように評価されます。

  1. self.queryに評価されるかどうかを確認しFalseます。そうでない場合、によって参照されるオブジェクトself.queryはにバインドされqueryます。この状況でself.query_factory() は呼び出されません。
  2. y値(を含む)の場合、が呼び出され、その結果がにバインドされます。FalseNoneself.query_factory()query
于 2012-10-26T13:59:03.757 に答える
1

それは正しいです。ブール値のコンテキストでは、どれも false ではありません。self.query が None の場合、値は self.query_factory() によって決定されます

true と false に関する Python ドキュメント

于 2012-10-26T13:59:48.083 に答える
0

の動作を次のように簡潔に述べることができますor

左のオブジェクトが True に似ている場合は左のオブジェクトを返し、それ以外の場合は右のオブジェクトを返します。


この場合、左のオブジェクトは false に似ているため ( None)、右のオブジェクトを返すために関数を呼び出す必要があります。

于 2012-10-26T13:57:03.430 に答える