【问题标题】:UnboundLocalError: local variable 'password' referenced before assignmentUnboundLocalError:分配前引用的局部变量“密码”
【发布时间】:2014-07-25 00:27:29
【问题描述】:
def start():

    global smallq
    global medq
    global larq
    check = input("Would you like to change prices? Press Y to change or Press N to  continue to order: ")

    if check == "Y":
        password = input("What is the password?: ")
    else:
        print("Continuing to order...")
        smallq = 50
        medq = 120
        larq = 180
        order()

    if password == "please":
        quilt_price()
    else:
        print("Wrong password", "\n", "Continuing to order...")
        smallq = 50
        medq = 120
        larq = 180
        order()

例外:

Traceback (most recent call last):
  File "/Users/palerj09/Documents/SAC RW.py", line 128, in <module>
    start()
  File "/Users/palerj09/Documents/SAC RW.py", line 18, in start
    if password == "please":
UnboundLocalError: local variable 'password' referenced before assignment

如果我写“N”来回答输入它会运行order() 并且一切正常,除非order() 完成它会引发错误。我尝试将password 设为全局,但这似乎不起作用。有什么想法吗?

【问题讨论】:

    标签: python python-3.x local


    【解决方案1】:

    如果输入不是"Y"怎么办?那么password 将永远不会被创建,因此if password == "please" 会引发错误。也许在你的条件语句之前做password = None

    【讨论】:

    • password is None 更pythonic。
    • 感谢您的回答。我没有尝试更改输入,但我确实在条件句之前尝试了密码=无。在代码的最后,它重复了语句 else: print("Wrong password.. etc) 并再次重复了整个 order() 函数
    • @pynovice 这是为了比较。我们在这里定义一个变量
    • @Rasp 你在你的order() 中调用start() 吗?我看不出它怎么会重复
    • 不,我不是,这就是我感到困惑的原因。但我只是想通了,我只是在 order() 的末尾添加了一个 sys.exit()。我不知道为什么它不工作,但它现在工作,所以一切都很好。感谢您的帮助
    猜你喜欢
    • 2017-08-10
    • 2020-01-16
    • 2019-12-05
    • 2017-09-19
    • 2020-09-26
    • 2022-01-02
    • 2019-03-22
    • 2019-01-24
    • 2021-07-01
    相关资源
    最近更新 更多