0

我试图在其他程序中调用该函数,得到如下错误:

[\'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
4

2 回答 2

1

x您的代码在没有先设置变量的情况下操作变量:

if exactShareNameFound: x+= line

在函数顶部添加以下行:

x = ''

该代码无论如何都不会像当前编写的那样工作,因为它试图从以“写和读”模式打开的文件中读取;文件指针被设置到文件的末尾,因此从文件中读取将永远不会返回数据,而无需先寻找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')而不是响亮的“打印”语句提前退出函数。

于 2013-07-16T09:57:13.737 回答
1

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

在您的代码中:

if exactShareNameFound: x+= line

您没有声明 x,但您在上面的行中引用了它。

如果您想附加 to 的值line,则在使用它之前x声明一个变量,如下所示:x

x = ''
于 2013-07-16T10:12:41.947 回答