关于 local variable 'has' referenced before assignment 问题

今天在django开发时,访问页面总是出现错误提示“
local variable 'has' referenced before assignment
”,查了一下资料,好像是说无法访问这个变量,检查一下代码我的视图是这样写的:

def MusicTable(request):
    MUSICIANS = [ 
        {'name': 'Django Reinhardt', 'genre': 'jazz'}, 
        {'name': 'Jimi Hendrix',     'genre': 'rock'}, 
        {'name': 'Louis Armstrong',  'genre': 'jazz'}, 
        {'name': 'Pete Townsend',    'genre': 'rock'}, 
        {'name': 'Yanni',            'genre': 'new age'}, 
        {'name': 'Ella Fitzgerald',  'genre': 'jazz'}, 
        {'name': 'Wesley Willis',    'genre': 'casio'}, 
        {'name': 'John Lennon',      'genre': 'rock'}, 
       {'name': 'Bono',             'genre': 'rock'}, 
       {'name': 'Garth Brooks',     'genre': 'country'}, 
       {'name': 'Duke Ellington',   'genre': 'jazz'}, 
       {'name': 'William Shatner',  'genre': 'spoken word'}, 
       {'name': 'Madonna',          'genre': 'pop'},]
    Mu=[]
    #预处理 判断是否粗体显示 ,模板只是呈现方式,不应该处理 判断哪些是特殊显示
    for m in MUSICIANS:
        if '' not in m['name']:
             has = True
        Mu.append({'name':m['name'],
                   'genre':m['genre'],
                   'is_important':m['genre'] in ('jazz','rock'),
                   'is_pretentious': ' ' not in  m['name'],}
                  )
    return render_to_response('Musictable.html', {'Mu': Mu,'has_pretentious':has,})

猛地一看变量has应该是有赋值啊,我郁闷了。
    后来看到网上一个帖子说的也是这个问题
-------------------------------------------------------------------------------

程序大致是这样的:

CONSTANT = 0

def modifyConstant() :
        print CONSTANT
        CONSTANT += 1
        return

if __name__ == '__main__' :
        modifyConstant()
        print CONSTANT

运行结果如下:
UnboundLocalError: local variable 'CONSTANT' referenced before assignment

看来,全局变量在函数modifyConstant中边成了局部变量,似乎全局变量没有生效?
做点修改:

CONSTANT = 0

def modifyConstant() :
        print CONSTANT
        #CONSTANT += 1
        return

if __name__ == '__main__' :
        modifyConstant()
        print CONSTANT

运行正常,看来函数内部是可以访问全局变量的。
所以,问题就在于,因为在函数内部修改了变量CONSTANT,Python认为CONSTANT是局部变量,而print CONSTANT又在CONSTANT += 1之前,所以当然会发生这种错误。

那么,应该如何在函数内部访问并修改全局变量呢?应该使用关键字global来修饰变量(有点像PHP):

CONSTANT = 0

def modifyConstant() :
        global CONSTANT
        print CONSTANT
        CONSTANT += 1
        return

if __name__ == '__main__' :
        modifyConstant()
        print CONSTANT

就这么简单!

------------------------------------------------------------------------------------
看了上边帖子内容,我有了一点启发,仔细看一下我程序这里:
for m in MUSICIANS:
        if '' not in m['name']:
             has = True
        Mu.append({'name':m['name'],
                   'genre':m['genre'],
                   'is_important':m['genre'] in ('jazz','rock'),
                   'is_pretentious': ' ' not in  m['name'],}
                  )
    return render_to_response('Musictable.html', {'Mu': Mu,'has_pretentious':has,})

标红的部分 ''中间没有空格,而在这个循环中根本没有一次能满足if '' not in m['name']: 这个条件,所以在 return render_to_response('Musictable.html', {'Mu': Mu,'has_pretentious':has,}) 传递 has的时候,报错。
解决办法有两个 一个是将if '' not in m['name']: 的''加上空格变成‘ ’。
第二个办法在之前给has一个初始值 has=False。
---------------------
作者:jiangnanandi
来源:CSDN
原文:https://blog.csdn.net/jiangnanandi/article/details/3553243
版权声明:本文为博主原创文章,转载请附上博文链接!

This inspection warns about local variables referenced before assignment.的更多相关文章

  1. python 错误--UnboundLocalError: local variable '**' referenced before assignment

    val = 9 def test(flag): if flag: val = 1 else: print("test") return val if __name__ == '__ ...

  2. local variables referenced from a Lambda expression must be final or effectively final------理解

    前几天使用lamdba时,报了一个这个错,原因是在lamdba体中使用了一个变量,觉得很奇怪! 今天在读这本书的时候,又看到了这个解释,这里有了更深刻的理解,总结一下: 在jdk1.8之前在使用匿名内 ...

  3. Effective Java 45 Minimize the scope of local variables

    Principle The most powerful technique for minimizing the scope of a local variable is to declare it ...

  4. local variable 'xxx' referenced before assignment

    这个问题很囧,在外面定义了一个变量 xxx ,然后在python的一个函数或类里面引用这个变量,并改变它的值,结果报错local variable 'xxx' referenced before as ...

  5. Implicitly Typed Local Variables

    Implicitly Typed Local Variables It happens time and time again: I’ll be at a game jam, mentoring st ...

  6. 遇到local variable 'e' referenced before assignment这样的问题应该如何解决

    问题:程序报错:local variable 'e' referenced before assignment 解决:遇到这样的问题,说明你在声明变量e之前就已经对其进行了调用,定位到错误的地方,对变 ...

  7. RDO Stack Exception: UnboundLocalError: local variable 'logFile' referenced before assignment

    Issue: When you install RDO stack on CentOS, you may encounter following error. Error: [root@localho ...

  8. Python问题:UnboundLocalError: local variable 'xxx' referenced before assignment

    参考链接: http://blog.csdn.net/onlyanyz/article/details/45009697 https://www.cnblogs.com/fendou-999/p/38 ...

  9. 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assignment

    闭包(lexical closure) 什么是闭包前面已经说过了,但是由于遗留问题,所以单独作为一个章节详解讲解下 不多说,看例子: def funx(x): def funy(y): return ...

随机推荐

  1. Vuetify按需加载配置

    自己配置vuetify按需加载的步骤,在此记录: 执行npm install vuetify –save 或 yarn add vuetify添加vuetify添加依赖执行npm install -- ...

  2. (转)使用OpenGL显示图像(四)运用投影与相机视角

    运用投影与相机视角 编写:jdneo - 原文:http://developer.android.com/training/graphics/opengl/projection.html 在OpenG ...

  3. 三.通过jenkins对系统的监控(2)

    在这记录下,通过HTTP Request Plugin监控系统的异常.和上一篇原理差不多. 1.首先需要安装HTTP Request Plugin.插件安装好后,在系统设置下面会新增如下配置: 具体有 ...

  4. Linux中的特殊权限s、t、i、a

    文件权限除了r.w.x外还有s.t.i.a权限:s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行.在设置s权限时文件属主.属组必须先设置相应的x权限,否则s权限并不能 ...

  5. HDU 1724 Ellipse (自适应辛普森积分)

    题目链接:HDU 1724 Problem Description Math is important!! Many students failed in 2+2's mathematical tes ...

  6. 洛谷 P3455 [POI2007]ZAP-Queries (莫比乌斯函数)

    题目链接:P3455 [POI2007]ZAP-Queries 题意 给定 \(a,b,d\),求 \(\sum_{x=1}^{a} \sum_{y=1}^{b}[gcd(x, y) = d]\). ...

  7. Normal Equation Algorithm

    和梯度下降法一样,Normal Equation(正规方程法)算法也是一种线性回归算法(Linear Regression Algorithm).与梯度下降法通过一步步计算来逐步靠近最佳θ值不同,No ...

  8. 11.Jmeter 快速入门教程 -- jmeter事务控制器

    你肯定知道, jmeter是一个跨系统平台的性能测试工具, 比如他可以在linux,freebsd,windows,solaris 等等各种系统上可以运行. 我可以说, 事务 transaction ...

  9. activiti7流程实例启动

    package com.zcc.acvitivi; import org.activiti.engine.ProcessEngine;import org.activiti.engine.Proces ...

  10. nodeType介绍及应用示例

    一,DOM中的节点类型介绍 DOM将一份文档抽象为一棵树,而树又由众多不同类型的节点构成. 元素节点是DOM中的最小单位节点,它包括了各种标签,比如表示段落的p,表示无序列表的ul等. 文本节点总是被 ...