全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1062 6
2018-09-30
a = 1
def test():
    print(a)
test()
这段代码可以正常运行,print(a)输出“1”

a =1
def test():
    print(a)
    a=2
test()
这段代码仅仅在“print(a)”后边添加了“a=2”,就出错了“UnboundLocalError: local variable 'a' referenced before assignment
连print(a)也不能运行了

何故?python解释器会“预读”后续代码?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-9-30 11:33:06
这个说法似乎有道理http://blog.cipherc.com/2015/04/25/python_namespace_and_scope/
根据Python[“静态定义,动态使用”](https://stackoverflow.com/questions/39801617/what-does-it-mean-that-a-scope-is-determined-statically-and-used-dynamically)的规则,代码在执行到print时,解释器早已把整个函数加载到内存,并知道b变量未定义。于是报错。

大家认为?请高手指点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-9-30 11:38:14
作为解释型的语言,应该是逐句运行的,怎么把握python的这个问题?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-9-30 12:30:17
local variable \'a\' referenced before assignments-授予前的局部变量a. 粗略分析可能是函数不完整导致的.只是参考.验证其语句可用性需要再赋予完整函数再调试.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-10-1 09:09:15
fmsu_я 发表于 2018-9-30 12:30
local variable \'a\' referenced before assignments-授予前的局部变量a. 粗略分析可能是函数不完整导致的 ...
函数不完整?不存在这个问题啊
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-10-1 13:03:36
@lg21c我不是高手,只是提供个也许可行的正确调试办法.如果如果还不行,再排查用其他办法.其他没留言的号,不想承担过多风险.就不回复了.平安是福.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群