相关疑难解决方法(0)

不明白为什么会发生UnboundLocalError

我在这做错了什么?

counter = 0

def increment():
  counter += 1

increment()
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出了一个UnboundLocalError.

python scope global-variables

153
推荐指数
5
解决办法
18万
查看次数

Python 2.x中的非本地关键字

我正在尝试在Python 2.6中实现一个闭包,我需要访问一个非局部变量,但似乎这个关键字在python 2.x中不可用.如何在这些版本的python中访问闭包中的非局部变量?

python closures python-2.x python-nonlocal

112
推荐指数
6
解决办法
4万
查看次数

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

可能重复:
赋值
前引用的局部变量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 A() :
    b = 1

    def B() :
        # I can access 'b' from here.
        print( b )
        # But can i modify 'b' here? 'global' and assignment will not work.

    B()
A()
Run Code Online (Sandbox Code Playgroud)

对于B()函数变量中的代码,b在外部作用域中,但不在全局作用域中.是否可以bB()函数内修改变量?当然我可以从这里读取它print(),但是如何修改呢?

python python-2.7

95
推荐指数
3
解决办法
5万
查看次数

在函数外声明的变量

可能重复:
在赋值之前引用的python local var中的赋值错误
之前引用

好吧,我只是试着看看变量范围如何工作并在以下情况下运行.全部从终端跑:

x = 1
def inc():
    x += 5

inc()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in inc
UnboundLocalError: local variable 'x' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

所以我思考得很好也许我的方法无法访问x,所以我尝试了:

def inc():
    print(x)

1
Run Code Online (Sandbox Code Playgroud)

这样可行.现在我知道我可以这样做:

 def inc():
     global x
     x += 1
Run Code Online (Sandbox Code Playgroud)

这会奏效.但我的问题是为什么第一个例子失败了.我的意思是我希望自从print(x)工作以来x在函数内可见,那么为什么x + = 5失败?

python

43
推荐指数
3
解决办法
8万
查看次数

Python中的全局变量和局部变量

我正在学习Python.一本关于Python 3的书说以下代码应该可以正常工作:

def funky():
    print(myvar)
    myvar = 20
    print(myvar)

myvar = 10
funky()
Run Code Online (Sandbox Code Playgroud)

但是当我在Python 3.3中运行它时,我得到了

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

错误.我的理解是,首先print(myvar)funky应该是10,因为它是一个全局变量.第二个print(myvar)应该是20,因为本地myvar被定义为20.这里发生了什么?请帮忙澄清一下.

python function global-variables python-3.x

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

赋值前引用的另一个局部变量 - Python

我首先要说的是:我知道这个问题被很多人问到。我已经阅读了其他答案,并排除了:

我没有使用 += 进行作业;

我尝试显式分配函数中的每个变量,以确保它们不为空,以防函数执行的其他工作失败;

它们不是全局变量,我也不希望它们成为全局变量——它们只是我用来计算最终返回的内容的内部变量。

    ##  Gets the data from external website - refreshes whenever the programme is called. 
## Urllib2 required module 
##  csv to make life easier handling the data 

import urllib2
import csv
import sys  
import math
# import sqlite3    #don't need this just now, will probably run Django with MySQL when it comes to it
# import MySQLdb Likewise, don't need this just now. 
#python3
import atexit
from time import time
from datetime …
Run Code Online (Sandbox Code Playgroud)

python variables python-2.7

1
推荐指数
1
解决办法
2752
查看次数

在Python中用字符串中的每个其他字母大写?

我一直在尝试定义一个函数,它会将所有其他字母大写,并将空格转换为例如:

print function_name("Hello world")应打印"HeLlO wOrLd"而不是"HeLlO WoRlD"

我希望这是有道理的.任何帮助表示赞赏.

谢谢,奥利

python

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

“分配前引用的局部变量”

我来自具有丰富Java和PHP经验的国家,因此当涉及Python时,许多规则对我来说都不有意义。

我下面有一个递归的斐波那契函数,它吐出错误:

Traceback (most recent call last):
  File "C:\Users\Nic\workspace\lab8\src\Main.py", line 26, in <module>
    print fibcount(27),"took",calls,"calls."
  File "C:\Users\Nic\workspace\lab8\src\Main.py", line 19, in fibcount
    calls += 1
UnboundLocalError: local variable 'calls' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

calls = 0

def fibcount(n):
    calls += 1
    if n < 2:
        return (1,1)
    f1,c1 = fibcount(n-1)
    f2,c2 = fibcount(n-2)
    return (f1+f2,c1+c2+1)

print fibcount(27),"took",calls,"calls."
Run Code Online (Sandbox Code Playgroud)

在Java中,这显然是可行的,因为相对于函数而言,调用是全局变量,fibcount()因此使我感到困惑的是,调用不在某种程度上。

我究竟做错了什么?

python recursion function global-variables

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