【问题标题】:Why is my 'users_choice' variable referenced before definition?为什么在定义之前引用了我的“users_choice”变量?
【发布时间】:2020-08-06 15:49:56
【问题描述】:

我有一个 HTML 页面 choose.html 有多个按钮,每个按钮都具有相同的名称。我想在我的 Python/Flask 代码中将按下按钮的值分配给变量 users_choice

<form action="/" method="post">
   <div class="card_container_choose">
       <div class="row_choose">
           <div class="column_choose">
              <button type="submit" name="choose" value="Alex"/>
              <button type="submit" name="choose" value="Alfred"/>
              <button type="submit" name="choose" value="Anita"/>
              <button type="submit" name="choose" value="Anne"/>
           </div>
        </div> 
    </div>
</form> 

目前,我有一个名称列表,all_names=["Alex", "Alfred", "Anita", "Anne"],我正在尝试将按下按钮的值与列表中的一个名称匹配,然后再将其分配给users_choice。分配后,我在我的 numpy 矩阵中引用 users_choice

all_names = ["Alex", "Alfred", "Anita", "Anne"]

@app.route("/", methods=["GET", "POST"])
def choose():
    if request.method == "POST":

        for name in all_names:
            if request.form.get('choose') == name:
                users_choice = name
                break

         users_choice_index = np.where(user_board == users_choice)[0]

但是,我收到此错误消息

UnboundLocalError: local variable 'users_choice' referenced before assignment

表明users_choice 从未被赋值。 谁能帮助解释发生了什么以及如何解决它?

【问题讨论】:

  • 为什么要使用循环?为什么不只是if request.form.get('choose') in all_names:
  • print(request.form.get('choose')) 显示什么?

标签: python html flask runtime-error


【解决方案1】:

变量处于循环中,使其全局不可用。您应该首先在循环之外定义它,例如 users_choice = '' 然后执行您正在执行的操作。

【讨论】:

    【解决方案2】:

    我不认为按钮可以发送值。 尝试在表单字段中设置值(可能是一个选择),然后只有 1 个按钮来提交表单。或者开始使用 ajax,这样您就可以将 ajax 调用分配给您想要的任何按钮。

    【讨论】:

    • 提交按钮确实会发送一个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2020-08-07
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多