【问题标题】:I have a problem with scopes in Python, Variable declared as global but still get err我在 Python 中的范围有问题,变量声明为全局但仍然出错
【发布时间】:2019-07-22 15:55:52
【问题描述】:

即使在将变量声明为全局变量之后

import random

def wordRandomizer(categorie):
    randomNum = random.randint(0, len(categorie))
    #Picks a random number to pick a word from the list
    choosenWord = categorie[randomNum]
    #actually chooses the word
    global hidden_word
    #Globals the variable that I have the problem with
    hidden_word = "_" * len(choosenWord)
    return choosenWord

def wordFiller(word,letter):
    hidden_wordTemp = hidden_word.split()
    for i in range(len(word)):
        if word[i] == letter:
            hidden_wordTemp[i] = letter
        else:
            pass
    hidden_word = ''.join(hidden_wordTemp)
    print(hidden_word)

wordFiller(wordRandomizer(['book', 'bottle', 'door']), 'o')

错误输出如下:

Traceback (most recent call last):
  File "C:\Users\amitk\OneDrive\School\2018-2019 ט\Cyber\Hangman.py", line 295, in <module>
    wordFiller(wordRandomizer(['book', 'bottle', 'door']), 'o')
  File "C:\Users\amitk\OneDrive\School\2018-2019 ט\Cyber\Hangman.py", line 286, in wordFiller
    hidden_wordTemp = hidden_word.split()
UnboundLocalError: local variable 'hidden_word' referenced before assignment

由于某种原因,它表示局部变量在赋值之前已被引用,即使它已被赋值并“全局化”

【问题讨论】:

    标签: python variables scope global-variables local


    【解决方案1】:

    wordFiller 函数中的hidden_word 仍然是该函数的局部变量。尝试在该函数中使其成为全局变量。

    def wordFiller(word,letter):
       global hidden_word
       hidden_wordTemp = hidden_word.split()
       // etc
    

    此外,randint(start, end) 函数包含 start 和 end,因此您可能会生成 end 值。这将超出您的阵列范围。试试这个吧。

      randomNum = random.randint(0, len(categorie) - 1)
    

    最后,split() 可能没有按照您的想法行事。如果您想要一个字符列表,请改用list(str)

     hidden_wordTemp = list(hidden_word)
    

    【讨论】:

    • 非常感谢!解决了一切!我一运行程序就得到了超出范围的错误,所以你的评论很有帮助!感谢您提及.split() 我会调查的!再次感谢,解决了
    【解决方案2】:

    正如错误消息所述,您在分配之前引用了hidden_word

    def wordFiller(word,letter):
        hidden_wordTemp = hidden_word.split()
    

    wordFilter 的范围内,您从未初始化过hidden_word。确保在使用变量之前对其进行初始化。

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 2014-05-10
      • 2017-08-19
      相关资源
      最近更新 更多