UnboundLocalError:分配前引用了本地变量“ settingsText”

时间:2019-10-24 12:54:30

标签: python

我是Python的新手,并且通常是编码人员,我正在尝试编写一个程序,允许您使用乌龟图形进行绘制,这是我的代码:

import turtle

# Setup
bot = turtle.Turtle()
bot.speed(5)
bot.color("black")
x = 1
color = "black"
speed = 5
length = 20
visibility = "true"
inputText = '''Choose an option:
A) Forward
B) Backward
C) Left
D) Right
E) Settings
F) Exit
> '''

settingsText = "Choose a setting: \nA) Color: " + str(color) + "\nB) Speed: " + str(speed) + "\nC) Length: " + str(length) + "\nD) Visibility: " + str(visibility) + "\n> "

def main():
    while x == 1:
        mainMenu = input(inputText)
        if mainMenu == "A":
            bot.forward(length)
        elif mainMenu == "B":
            bot.backward(length)
        elif mainMenu == "C":
            bot.left(90)
        elif mainMenu == "D":
            bot.right(90)
        elif mainMenu == "E":
            while x == 1:
                settingsMenu = input(settingsText)
                global settingsText
                if settingsMenu == "A":
                    color = input("What color should the bot write with?")
                    bot.color(color)
                if settingsMenu == "B":
                    speed = input("How fast should the bot move?")
                    bot.speed(speed)
                if settingsMenu == "C":
                    length = input("How far should the bot move each time?")
                if settingsMenu == "D":
                    visibility = input("Should the bot be visible?")
                    if visibility == "true":
                        bot.showturtle()
                    if visibility == "false":
                        bot.hideturtle()
                if settingsMenu == "E":
                    break
                settingsText = "Choose a setting: \nA) Color: " + str(color) + "\nB) Speed: " + str(speed) + "\nC) Length: " + str(length) + "\nD) Visibility: " + str(visibility)
        elif mainMenu == "F":
            break


main()

当我当前运行它时,它说UnboundLocalError:分配前引用了本地变量'settingsText'。我该如何解决?我读过其他文章,指出如果您已经在其他地方或其他地方分配了变量,则无法在本地作用域内分配变量(Whats a scope?)。不过,这没有任何意义,我在开始时分配了变量,然后在if循环的末尾给了它一个新的赋值,以便下次播放循环时,它表示不同的内容。任何帮助将不胜感激!

-英雄

2 个答案:

答案 0 :(得分:0)

在使用变量之前,应先调用.video-container { position: absolute; top: 0; bottom: 0; width: 100%; height: 100%; overflow: hidden; object-fit: fill; } .video-container video { min-width: 100%; min-height: 100%; width: auto; height: auto; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }

global

使用global settingsText settingsMenu = input(settingsText) 之类的变量也会遇到同样的问题。

答案 1 :(得分:0)

问题似乎出在线路上

settingsMenu = input(settingsText)

使用后,您将声明全局设置文本。它将不起作用。您应在使用全局变量之前声明它们,否则它将被视为局部变量。

尝试在函数顶部将所有需要的变量设置为全局变量。这样,您将一起看到所有这些内容。

此外,尽量不要使用全局变量。这被认为是不好的做法,并且在大多数情况下具有简单的解决方法。