Python 函数中未识别全局变量

Python 函数中未识别全局变量,python,python-2.7,scrapy,global-variables,Python,Python 2.7,Scrapy,Global Variables,我知道这个问题看起来和这里的很多其他问题一模一样,因为我只是把它们都读了一遍,它们都说要做我已经尝试过的事情,但都没有成功(或者我忽略了我的处境中的细微差别)。以下是我的情况: 我正在使用Scrapy和Python 2.7.11编写一个scraper,我的代码如下所示(这是一个复制粘贴,省略了不相关的行,但我可以根据请求重新添加它们): 由于未定义全局“rawTranslations”,因此无论何时调用“print rawTranslations”或“rawTranslations.append

我知道这个问题看起来和这里的很多其他问题一模一样,因为我只是把它们都读了一遍,它们都说要做我已经尝试过的事情,但都没有成功(或者我忽略了我的处境中的细微差别)。以下是我的情况:

我正在使用Scrapy和Python 2.7.11编写一个scraper,我的代码如下所示(这是一个复制粘贴,省略了不相关的行,但我可以根据请求重新添加它们):

由于未定义全局“rawTranslations”,因此无论何时调用“print rawTranslations”或“rawTranslations.append(rawTranslation)”,都会返回错误

正如我之前所说,我已经深入研究了这一点,互联网上几乎每个人都说只需在您要使用/修改的任何函数的开头添加一个“全局(名称)”行(尽管我从未分配给它,所以我甚至不需要它)。无论我的全局行是否被注释掉,我都会得到相同的结果。这种行为似乎违背了我所读到的关于全局函数在Python中如何工作的所有内容,因此我怀疑这可能是一种与如何通过Scrapy.Request(..)调用解析函数有关的古怪行为


很抱歉,您再次看到了同样的问题,但这一次似乎有点扭曲,希望有人能找到问题的根源。谢谢。

在您的情况下,要访问的变量不是全局变量,而是在类的范围内

global_var = "global"

class Example:

    class_var = "class"

    def __init__(self):
         self.instance_var = "instance"

    def check(self):
        print(instance_var) # error
        print(self.instance_var) # works
        print(class_var) # error
        print(self.class_var) # works, lookup goes "up" to the class
        print(global_var) # works
        print(self.global_var) # works not
如果要写入全局变量,只需使用
global
关键字。提示:不要这样做,因为编写全局变量只会带来痛苦和绝望。仅将全局变量用作(配置)常量

global_var = "global"

class Example:

    def ex1(self):
        global_var = "local" # creates a new local variable named "global_var"

    def ex2(self):
        global global_var
        global_var = "local" # changes the global variable

Example().ex1()
print(global_var) # will still be "global"
Example().ex2()
print(global_var) # willnow be "local"

如果您想在类中使用变量,可以使用self.xxx

class A:
...     var = []
...     def test(self):
...         self.var.append(10)
...         print self.var

看起来缩进已关闭,例如,函数
parse
肯定是“LbcSubtopicSpider”类的一个方法?另外,它看起来不是一个全局属性,而是一个类属性。当然,解决方案是使用
self.rawtransactions
LbcSubtopicSpider.rawtransactions
(取决于上下文)。当我将缩进粘贴到这里时,缩进实际上被破坏了——将修复它。至于全局/类属性点:我想我甚至没有想过会有不同。这可能是一个主要使用Java编码并在类中执行所有操作的产品…
rawstations
不是全局的,它是一个类变量。。。
class A:
...     var = []
...     def test(self):
...         self.var.append(10)
...         print self.var