函数中无法识别全局变量

2024-10-01 11:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个问题看起来和这里的其他问题一模一样,因为我只是把它们都读了一遍,它们都说要做我已经尝试过的事情,但它没有奏效(或者我错过了与我的情况有细微差别)。我的情况是:

我正在用Scrapy和python2.7.11编写一个scraper,我的代码如下(这是一个删除了不相关行的复制粘贴,但我可以根据请求重新添加):

class LbcSubtopicSpider(scrapy.Spider):

    ...omitted...

    rawTranscripts = []
    rawTranslations = []

    def parse(self, response):
        #global rawTranscripts, rawTranslations
        rawTitles = []
        rawVideos = []
        for sel in response.xpath('//ul[1]'): #only scrape the first list

        ...omitted...

            index = 0
            for sub in sel.xpath('li/ul/li/a'): #scrape the sublist items
                index += 1
                if index%2!=0: #odd numbered entries are the transcripts
                    transcriptLink = sub.xpath('@href').extract()
                    #url = response.urljoin(transcriptLink[0])
                    #yield scrapy.Request(url, callback=self.parse_transcript)
                else: #even numbered entries are the translations
                    translationLink = sub.xpath('@href').extract()
                    url = response.urljoin(translationLink[0])
                    yield scrapy.Request(url, callback=self.parse_translation)

        print rawTitles
        print rawVideos
        print rawTranslations

    def parse_translation(self, response):
        global rawTranslations
        for sel in response.xpath('//p[not(@class)]'):
            rawTranslation = sel.xpath('text()').extract()
            rawTranslations.append(rawTranslation)

这将在任何时候返回一个错误“print rawTranslations”或rawTranslations.append调用(rawTranslation)”是因为未定义全局“rawTranslations”。在

正如我之前所说,我已经对这个问题进行了广泛的研究,几乎每个人都在互联网上说,只要在你要使用/修改它的任何函数的开头添加一个“global(name)”行(虽然我从来没有分配给它,所以我甚至不需要这个)。不管我的全局行是否被注释掉,结果都是一样的。这种行为似乎违背了我所读到的关于Python中全局变量如何工作的所有内容,因此我怀疑这可能是一个与如何调用解析函数有关的古怪问题恶心。请求(....). 在

很抱歉,你又看到了一个问题,但这次似乎有点扭曲,希望有人能查到真相。谢谢。在


Tags: theinselfurlforparseresponseextract
2条回答

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

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关键字。提示:不要这样做,因为写出来的全局变量只会带来痛苦和绝望。只将全局变量用作(config)常量。在

^{pr2}$

如果要在类中使用变量,可以使用自我xxx在

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

相关问题 更多 >