[' UnboundLocalError',["本地变量' x'在转让之前引用"]]

时间:2013-07-16 09:55:25

标签: python python-2.7

我试图在其他程序中调用该函数来获取错误,如:

[\'UnboundLocalError\', ["local variable \'x\' referenced before assignment"]]  

请帮助

connect FSN1 @FSN1 @MANTISPORT  
connect FSN2 @FSN2 @MANTISPORT  
* from commonFunctions import *  
* import os  
* import sys  
* import shutil
import io

*:
    #********* Common Variables**********
    exactShareNameFound = False

    def findExact(logMessage, share):
        f = open('logFile', 'w+')
        f.write(logMessage)
        for line in f:

          if line.find('%s')%(share) >= 0: exactShareNameFound = True

          if exactShareNameFound: x+= line

          if line.find('Share Name')>=0:
              if line.find('%s')(share)<0: exactShareNameFound = False

              else:
                    print('ERROR!!')
          else:
                print('Error in Executing Loop')



        return x

2 个答案:

答案 0 :(得分:1)

您的代码正在操作变量x,而无需先设置它:

if exactShareNameFound: x+= line

在函数顶部添加以下行:

x = ''

代码无法正常编写 ,因为它试图从以“写入和读取”模式打开的文件中读取;文件指针设置为文件的 end ,因此从中读取将永远不会返回数据而不首先搜索strat。

该功能可以进行更多清理:

def findExact(logMessage, share):
    share = str(share)

    with open('logFile', 'w+') as f:
        f.write(logMessage)
        f.seek(0)

        lines = []
        found = False
        for line in f:
            if share in line:
                found = True

            if found: 
                x.append(line)

            if 'Share Name' in line:
                if share not in line:
                    found = False
                    continue

    return ''.join(lines)

我不清楚何时应该提出“错误”信息;在任何情况下都使用raise ValueError('error message')代替响亮的'print'语句来提前退出函数。

答案 1 :(得分:1)

在python和几乎所有其他编程语言中,除非声明变量,否则不能更改变量中的值。

你的代码中的

if exactShareNameFound: x+= line

你没有声明x,但是你在上面一行中指的是它。

如果您想将line的值附加到x,请在使用之前声明变量x,如下所示:

x = ''