返回函数变量error~在赋值〜之前引用的局部变量'user',Python

时间:2012-03-21 21:43:56

标签: python function local-variables

我写了一个函数,我想从该函数返回一个变量,但是我一直收到错误

分配前引用的本地变量'user'

我的功能是:

    def txtelm():

    # Updates date field to the current date
    if textElement.name == "DATE":
        textElement.text = strftime("%y %m %d")

    if textElement.name == "CHECK":
        textElement.text = "AB"        

    # First code block replaces the "Drawn" title block initials
    if docauthor == "Mike" and textElement.name == "DRAWN":
        textElement.text = "MM"
        user = "mm"
        #print user

    elif docauthor == "Amy" and textElement.name == "DRAWN":
        textElement.text = "AB"
        user = "ab"
        #print user

    elif docauthor == "Ian" and textElement.name == "DRAWN":
        textElement.text = "IB"
        user = "ib"

    elif docauthor == "Chris" and textElement.name == "DRAWN":
        textElement.text = "CM"
        user = "cm"

    elif docauthor == "Cynthia" and textElement.name == "DRAWN":
        textElement.text = "CC"
        user = "cc"

    return user

在我的代码中,我调用函数:

for textElement in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
        txtelm()
        user = txtelm()
        if textElement.name == "PATH":
        textElement.text = outloc + "\\" + sitename.replace(" ", "_") + "_" + trunc + strftime("%d%b%y") + "_" + user

我设置了一些打印消息来打印'用户',但它似乎没有返回任何内容。在我创建函数之前,我在其中有代码,硬编码在'for循环'之下并且它起作用....所以我很难过为什么它没有返回任何值。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您的函数不带参数,但使用变量'textElement'。您需要定义您的功能:

txtelm(textElement):

并称之为:

user = txtelm(textElement)

循环代码中textElement的值将传递给函数。

我不确定对txtelm()的第一次调用是什么 - 它似乎没有做任何事情。

编辑:

我说得太早了 - 这里有几个问题。首先是上面的'user'的定义:因为每个定义都在'if'之内,当它们都不匹配时,它根本就不会被声明。添加:

user = ""

到函数的顶部以防止这种情况发生。

再次编辑:'docauthor'似乎也没有被定义 - 也许它应该是该函数的另一个参数?

答案 1 :(得分:0)

我猜你的if/elif陈述都不是真的。

答案 2 :(得分:0)

在尝试返回用户之前,有可能永远不会声明用户。在txtelm()

的开头将用户设置为空字符串
def txtelm():
   user = ""

然后测试用户是否为空

for textElement in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
        txtelm()
        user = txtelm()
        if user == "":
           #handle the error