0

Django アプリケーションでは、error = "something" を返すフォームにいくつかのチェックがあります。
問題は、エラーがない限り、そのエラーは定義されないということです。

mycharacters = Character.objects.filter(username_id=request.user.id)

if(mycharacters.count() >= 5):
    error = True
if not error:
    #save to DB

問題は、エラーがない場合、エラー変数が存在しないことです。

このエラーを回避するために、次のような可能性についても考えました。

error = None
#checks here
if error == None:
    #save to DB

しかし、これが最善のアプローチであるかどうかはわかりません。

if error var does not exist:Pythonで行う方法はありますか?

4

3 に答える 3

3

次のことができます。

error = mycharacters.count() >= 5
if not error:
    ...

アップデート

error = mycharacters.count() >= 5
if error:
    to_json = {"incorrect":"Excedeed maximum"}
else:
    # Save to DB
于 2013-07-24T09:15:41.763 に答える
1

elseブランチを使用するか:

if mycharacters.count() >= 5:
    error = True
else:
    error = False

または、変数を最も可能性の低い値に初期化し、再割り当てします。

error = False
if mycharacters.count() >= 5:
    error = True

多くの場合、後者の方が読みやすいですが、両方のアプローチが機能します(さらに多くのことを行う必要がある場合に拡張するのが難しい場合でも、他の回答に見られる単一式のバリアントも同様です)。

(「false」値を確立するために単純な代入以上のことを行う必要がある場合、if/else通常は構成が優先されますが、この場合、2 回代入するコストはわずかです。)

変数が存在するかどうかを確認することはできますが、冗長でプログラミング スタイルが良くありません。変数の欠落は、プログラムの非表示状態ではなく、プログラミング エラーと見なす必要があります。

于 2013-07-24T09:32:34.317 に答える
0

これは、最初の条件 (最初の if) が失敗すると、そのブロックが実行されないため、 name の変数が存在しないためです。その後、2 番目の条件があり、Python インタープリターが nameのerror変数を取得しません。それが、代入前に参照errorされた を与えていた理由です。error

mycharacters = Character.objects.filter(username_id=request.user.id)

if(mycharacters.count() >= 5):
    error = True
if not error:
    #save to DB

したがって、デフォルト値のif(mycharacters.count() >= 5)変数を設定し、条件が真になった場合にのみ変数を設定する前に。errorFalseTrue

于 2013-07-24T09:20:34.643 に答える