我写了一个函数,我想从该函数返回一个变量,但是我一直收到错误
分配前引用的本地变量'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循环'之下并且它起作用....所以我很难过为什么它没有返回任何值。
有什么建议吗?
答案 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