开发者社区> 问答> 正文

Python全局变量和局部变量的问题 400 请求报错 

# coding:utf-8
sum = 5
def add(x, y):
    print sum
    sum = x + y

if __name__ == '__main__':
    add(7, 8)

上面的代码在执行的时候会出错,错误信息是:

Traceback (most recent call last):

  File "test.py", line 11, in <module>

    add(7, 8)

  File "test.py", line 6, in add

    print sum

UnboundLocalError: local variable 'sum' referenced before assignment

想请教一下为什么会出错,

在print sum的时候sum用的是全局变量sum,之后的sum = x+y相当于在add函数内部创建一个局部变量sum,我觉得应该没什么问题。但是就是报错了。

如果将print语句拿到sum赋值语句语句下面就不会报错,代码如下

# coding:utf-8
sum = 5
def add(x, y):
    sum = x + y
    print sum

if __name__ == '__main__':
    add(7, 8)

哪位大神能解释一下吗?不胜感激!

展开
收起
kun坤 2020-05-29 17:30:56 537 0
1 条回答
写回答
取消 提交回答
  • 错误信息是:sum在未赋值前就被引用
    简单地说:函数内部定义的为局部变量。
    python中要使用变量,必须先给变量赋值。
    去掉函数里面的sum = x + y(或者改变这个变量名)
    或者函数内部global sum,在print sum;
    或者和你第二个代码那样把sum = x + y提到print sum前面

    ######回复 @FuXing福兴 : 好的,明白了,谢谢了######回复 @ssspure : 你自己也知道先找局部的啊,你print sum时,它先找自身函数内部是否有这个变量。(你的代码中它就认为你没声明就引用就报错!)######我看到书上说的是,Python会先找局部变量,局部变量找不到的时候找全局变量,全局变量找不到的时候才会报错,但是第一段程序里面sum在全局变量里面是有的,为什么还会报错呢######global######没有缩进看不懂啊######回复 @ssspure : 不是大神,也初学,刚看到过这个局部变量,你看下第三个人的回复######不好意思,修改了,大神你再看看###### 一旦解释器“发现”你在函数内部对sum赋了值,sum在这个函数里就变成了局部变量,也就是说,即使在第一行就访问sum,不显示注明global的情况下也是表示局部的sum,然而真正创建sum的语句还在后面。

    2020-05-29 17:31:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载