仅在为某些变量赋值之前引用的局部变量

时间:2014-07-10 05:24:19

标签: python-3.x

我试图通过查看以前的线程来理解这一点,但我仍然不明白为什么我在下面的代码中只有两个变量之一出现此错误(代码很糟糕我知道):

alfaphet=('abcdefghijklmnopqrstuvxyz')
cryptalfaphet=('defghjiklmnopqrstuvxyzabc')
spaceNumber=[]
textCopy=[]


def crypt():
    textCopy=[]
    print('print the text that you want to encrypt:')
    text=input()
    for i in range(len(text)):
        for j in range(len(alfaphet)):
            if text[i]==alfaphet[j]:
                textCopy.append(cryptalfaphet[j])
        if text[i]==' ':
        spaceNumber.append(i)
    for i in range(len(spaceNumber)):
        for j in range(len(text)):
            if list(range(len(text)))[j]==int(spaceNumber[i]):
                textCopy.insert(j, ' ')
    textCopy=''.join(textCopy)
    print(textCopy)

crypt()

此代码工作正常,但如果我删除

textCopy=[] 

从def块开始的对齐,我得到这样的错误:

Traceback (most recent call last):
File "C:/Python33/dekrypt.py", line 26, in <module>
crypt()
File "C:/Python33/dekrypt.py", line 13, in crypt
textCopy.append(cryptalfaphet[j])
UnboundLocalError: local variable 'textCopy' referenced before assignment

我的问题是为什么spaceNumber变量不会发生这种情况。在使用

进行对齐之前,我可以看到spaceNumber
spaceNumber.append(i)

asignment?它在def-block之前引用,但textCopy vaiable也是如此?有什么区别,他们从一开始就是空列表,我在两者上使用.append()方法,但Python似乎对它们的处理方式不同!?

1 个答案:

答案 0 :(得分:0)

您可以通过在函数开头添加以下行来避免此错误

def crypt():
    global textCopy
    ...
但是,这不是python的最佳实践。有关详细信息,请参阅此post