zoukankan      html  css  js  c++  java
  • 【Error】local variable 'xxx' referenced before assignment

    此种错误涉及到变量的作用域,即全局变量和局部变量的操作。

    总结如下:

    • 内部函数,不修改全局变量可以访问全局变量

    • 内部函数,修改同名全局变量,则python会认为它是一个局部变量

    • 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError

    在程序中设置的 sum 属于全局变量,而在函数中没有 sum 的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样 python 就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR或者Unbound-LocalError,这取决于python版本。)

    如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum的定义和赋值,所以报错。

    访问全局变量

    sum = 5
    def add(a=1,b=3):
        print a,b
        print sum #仅仅访问 
    >>add(4,8)
    >>print sum
    
    --------------
    >> 5
    >> 5
    

    修改同名的全局变量,则认为是局部变量

    sum=5
    def add(a=1,b=3):
        print a,b
    
    >>add(4, 8)
    >>4,8
    >>12
    

    修改同名的全局变量前已经引用则报错

    sum=5
    def add(a=1,b=3):
        print a,b
        print sum
        sum = a + b
        print sum
    
    >> add(4, 8)
    >> 报错。。。
    

    如何修改使其不报错呢,那就在修改全局变量之前使用全局关键字gloabal声明即可:global sum

  • 相关阅读:
    maven mirrorOf
    使用nexus 搭建本地 maven 服务器
    django 访问静态资源
    django 异常问题总结
    django导入 views.py
    vue js 实现 树形菜单
    vue.js 基础
    css之margin
    Vue项目笔记
    eslint ":"号
  • 原文地址:https://www.cnblogs.com/nju2014/p/5528072.html
Copyright © 2011-2022 走看看