【问题标题】:local variable 'final_result' referenced before assignment I am making an django calculator web app and i got stuck with this error分配之前引用的局部变量“final_result”我正在制作一个 django 计算器网络应用程序,但我遇到了这个错误
【发布时间】:2020-12-20 13:11:33
【问题描述】:

目前,我正在构建一个由 django 驱动的 UI Caculator 应用程序,但我遇到了这个错误。 我无法调试它。 无论我要尝试什么都行不通。 我的意思是我不知道为什么它告诉我在分配之前引用的最终结果,而我已经分配了 final_result 然后我有引用 final_result

Views.py

 def index(request):
    if request.method=="POST":
        values=request.POST['values'] 
        print(values)
        vals=re.findall(r"(\d+)",values) 
        operators=['+','x','÷','-','%']
        opr=[]
        for v in values:
            for o in operators:
                if v==o:
                    opr.append(o)
        print(opr)                      
        print(re.findall(r"(\d+)",values))
        for o in opr:
            if o=='÷':
                i=opr.index(o)
                res=float(vals[i])/float(vals[i+1])
                vals.remove(vals[i+1])
                opr.remove(opr[i])
                vals[i]=str(res)
                print(vals)
                print(opr)
            elif o=='x':
                i=opr.index(o)
                res=float(vals[i])*float(vals[i+1])
                vals.remove(vals[i+1])
                opr.remove(opr[i])
                vals[i]=str(res)
                print(vals)
                print(opr)
            elif o=='+':
                i=opr.index(o)
                res=float(vals[i])+float(vals[i+1])
                vals.remove(vals[i+1])
                opr.remove(opr[i])
                vals[i]=str(res)
                print(vals)
                print(opr)
            else:
                i=opr.index(o)
                res=float(vals[i])-float(vals[i+1])
                vals.remove(vals[i+1])
                opr.remove(opr[i])
                vals[i]=str(res)
                print(vals)
                print(opr)
        if(len(opr)!=0):
            if opr[0]=='÷':
                result = float(vals[0])/float(vals[1])
            elif opr[0]=='x':
                result = float(vals[0])*float(vals[1])
            elif opr[0]=='+':
                result = float(vals[0])+float(vals[1])
            else :
                result = float(vals[0])-float(vals[1])
        final_result=result
        print(final_result)
    res=render(request,'index.html'{'result':final_result,'values':values})
    return res

【问题讨论】:

  • 简单。您正在将结果分配给 final_result 但是,结果在 if 语句和这一行中。结果得到无值

标签: python python-3.x django list python-requests


【解决方案1】:

如果request.method 不是"POST",则在调用render 之前不会分配final_result

【讨论】:

    【解决方案2】:

    你应该在之前初始化final_result

    final_result = 0
    if request.method == "POST":
    

    正如@SLDem 所说。

    或者在函数中声明 def index(request, final_result=0) 这也可以。

    【讨论】:

    • 这正是我复制的答案 :)
    • @Niketan yup 解决了我的问题。谢谢
    • @SLEm 我只是想给他所有的选择。如果我没有给出第一个选项,那将是不完整的。我应该对此表示歉意。希望你不介意,:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 2020-09-22
    • 2020-01-24
    相关资源
    最近更新 更多