函数中的UnboundLocalError

时间:2014-09-29 22:01:39

标签: python python-3.x

当我从一个函数中取出它时它会起作用,但当它是一个函数时它不起作用。我继续得UnboundLocalError,我不知道为什么。

import time
import random
mobhp = random.randint(10,40)
def fun1():
    print("You have chosen option number 1")
    #time.sleep(1)
    print("You attept an attack")
    #time.sleep(2)
    cointoss = 1
    if cointoss == 1:
        print("Attack successfull!")
        playerDam = random.randint(10,60)
        newmobhp = mobhp - playerDam
        print("You did",playerDam,"Damage")
        print(mobhp)
        print("^old hp^")
        print("VNew hpV")
        print(newmobhp)
        mobhp = newmobhp
        print("updated HP")
        print(mobhp)
def main():
    fun1()
main()

1 个答案:

答案 0 :(得分:-1)

这个问题可能已被多次回答,但值得再次回答,因为它有点棘手。

似乎您想要使用在函数定义之前定义的外部(如同全局)变量mobhp - 正如其他人在评论中指出的那样。您应该遵循Hasan的建议,但如果问题没有被函数外部的定义所掩盖,您可能已经完成了。实际上,你可能希望通过参数传递外部值,如Daniel建议的那样。我建议根本不要使用global - 几乎永远都不可能。

其他人未能解释的是,实际上,以下代码可行:

import time
import random
mobhp = random.randint(10,40)
def fun1():
    print("You have chosen option number 1")
    #time.sleep(1)
    print("You attept an attack")
    #time.sleep(2)
    cointoss = 1
    if cointoss == 1:
        print("Attack successfull!")
        playerDam = random.randint(10,60)
        newmobhp = mobhp - playerDam

def main():
    fun1()
main()

此处mobhp也在分配之前使用,并且使用之上的所有命令都与前面的情况相同。不同之处在于查找规则在函数外部找到了变量。

如果在局部范围中找不到变量,则变量在外部范围内搜索。但是,只有在读取变量时才会出现这种情况。一旦在函数体内部分配了变量,它就总是被认为是局部的,并且永远不会在外部范围内搜索它。

变量是本地的还是外部的决定是在编译函数期间完成的 - 简单地说,在读取脚本时加载函数体。调用该函数时,其定义已经加载(即正文编译)。由于行mobhp = newmobhp,确定mobhp必须是本地的,即使命令的发现时间晚于newmobhp = mobhp - playerDam

这可能始终是UnboundLocalError的原因。