相关疑难解决方法(0)

在函数中使用全局变量

如何在函数中创建或使用全局变量?

如果我在一个函数中创建一个全局变量,我如何在另一个函数中使用该全局变量?我是否需要将全局变量存储在需要访问的函数的局部变量中?

python scope global-variables

2939
推荐指数
22
解决办法
307万
查看次数

Python变量范围错误

以下代码在Python 2.5和3.0中按预期工作:

a, b, c = (1, 2, 3)

print(a, b, c)

def test():
    print(a)
    print(b)
    print(c)    # (A)
    #c+=1       # (B)
test()
Run Code Online (Sandbox Code Playgroud)

但是,当我取消注释行(B)时,我得到了UnboundLocalError: 'c' not assigned一行(A).的值ab被正确地打印.这让我感到困惑,原因有两个:

  1. 为什么在行(A)处抛出运行时错误,因为后面的行(B)语句?

  2. 为什么变量ab打印符合预期,同时c引发错误?

我能想到的唯一解释是,赋值创建了一个局部变量,即使在创建局部变量之前,它也优先于"全局"变量.当然,变量在存在之前"窃取"范围是没有意义的.cc+=1c

有人可以解释一下这种行为吗?

python variables scope

195
推荐指数
7
解决办法
6万
查看次数

在赋值之前引用的本地(?)变量

可能重复:
赋值
前引用的局部变量Python 3:UnboundLocalError:赋值前引用的局部变量

test1 = 0
def testFunc():
    test1 += 1
testFunc()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

UnboundLocalError:赋值前引用的局部变量'test1'.

错误说这'test1'是局部变量,但我认为这个变量是全局的

那么它是全局的还是本地的,如何解决这个错误而不将全局test1作为参数传递给testFunc

python python-3.x

108
推荐指数
3
解决办法
29万
查看次数

Python局部变量编译原理

def fun():  
    if False:
        x=3
    print(locals())
    print(x)
fun()
Run Code Online (Sandbox Code Playgroud)

输出和错误消息:

{}
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-57-d9deb3063ae1> in <module>()
      4     print(locals())
      5     print(x)
----> 6 fun()

<ipython-input-57-d9deb3063ae1> in fun()
      3         x=3
      4     print(locals())
----> 5     print(x)
      6 fun()

UnboundLocalError: local variable 'x' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

我想知道python解释器是如何工作的.请注意,x = 3根本不运行,并且不应将其视为局部变量,这意味着错误将是"名称'x'未定义".但是查看代码和错误消息,情况并非如此.谁能解释一下这种情况背后的python解释器编译的机制原理?

python interpreter compilation

7
推荐指数
2
解决办法
265
查看次数

“str”对象没有属性“len”

我有一种方法可以通过检查前三个字母/数字并确保它们在继续之前相同来工作

def combineProcess(request):
    carID1 = request.POST['carID1']
    carID2 = request.POST['carID2']
    for x in range (0,3):
        a += carID1.length(x)
        b += carID2.length(x)
    if a.equals(b):
        //do something
Run Code Online (Sandbox Code Playgroud)

在它使用之前,现在它停止了,我收到了这个错误。

Exception Type: UnboundLocalError
Exception Value:    

local variable 'a' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

几周前我从未使用过它并没有改变任何东西,所以我将 a 和 b 设为全局。

def combineProcess(request):
    carID1 = request.POST['carID1']
    carID2 = request.POST['carID2']
    global a,b
    for x in range (0,3):
        a += carID1.length(x)
        b += carID2.length(x)
    if a.equals(b):
        //do something
Run Code Online (Sandbox Code Playgroud)

现在我收到此错误。

Exception Type: NameError
Exception Value:    

name 'a' is not defined
Run Code Online (Sandbox Code Playgroud)

然后我删除了全局行并把这个

a = …
Run Code Online (Sandbox Code Playgroud)

python django scope loops

0
推荐指数
1
解决办法
3万
查看次数