【问题标题】:How to access a variable declared inside IF statement outside IF statement in Python如何在Python中的IF语句之外访问在IF语句中声明的变量
【发布时间】:2021-12-27 04:01:02
【问题描述】:

我正在尝试在 if 语句之外使用 searchData,以便可以在查询中使用该变量。但它给了我UnboundLocalError: local variable 'searchData' referenced before assignment的错误

@app.route('/ML', methods=['GET', 'POST'])
def index():
  if request.method == "POST":
        request_data = json.loads(request.data)
        searchData = (request_data['content'])
        return jsonify(searchData)
  mycursor = mydb.cursor(dictionary=True)
  query = "SELECT * FROM COMPANY WHERE COMPANY_NAME LIKE %s LIMIT 20;"
  mycursor.execute(query,("%" + searchData + "%",))
  myresult = mycursor.fetchall()

  company = []
  content = {}

  for result in myresult:
     content ={'COMPANY_NAME':result['COMPANY_NAME'],}
     company.append(content)
     content = {}
  return jsonify(company)

我还尝试在我的 if 语句上方声明 searchData。它消除了错误,但我的 if 语句没有更改该值。它仍然是我声明它的方式。我感谢任何人可以提供的任何帮助。提前谢谢你。

【问题讨论】:

  • request.method 总是等于 POST 吗?
  • @Programmer 不,一旦将数据传递到我的 python 后端,我的前端也会从函数中获取
  • 如果 request.method 不总是 POST,变量 searchedInput 可能不总是被声明。
  • @Programmer 你有什么建议可以解决这个问题?

标签: python mysql variables flask mysql-connector


【解决方案1】:

看来这个问题可以通过global对变量的处理来缓解。将 searchData 声明为 global first 怎么样?

@app.route('/ML', methods=['GET', 'POST'])
def index():
  global searchData
  if request.method == "POST":
        request_data = json.loads(request.data)
        searchData = (request_data['content'])
        return jsonify(searchData)
  mycursor = mydb.cursor(dictionary=True)
  query = "SELECT * FROM COMPANY WHERE COMPANY_NAME LIKE %s LIMIT 20;"
  mycursor.execute(query,("%" + searchData + "%",))
  myresult = mycursor.fetchall()

  company = []
  content = {}

  for result in myresult:
     content ={'COMPANY_NAME':result['COMPANY_NAME'],}
     company.append(content)
     content = {}
  return jsonify(company)

【讨论】:

    【解决方案2】:

    您在if 语句块中有一个return searchedInput 语句,删除它可能会解决您的问题。 return 语句将终止你的函数执行。

    对于GET 方法,searchedInput 应在if 语句之前声明。

    【讨论】:

    • 您好,我添加了更多代码来详细说明我的问题。我也应该为 GET 添加一个 fetch 语句吗?
    • 如果searchedData同时被POST和GET使用,则应在if语句之前声明
    猜你喜欢
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多