关于python:[‘UnboundLocalError’,[“赋值前引用的局部变量’x’]]

['UnboundLocalError', [“local variable 'x' referenced before assignment”]]

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

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

请帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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


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

在您的代码中:

if exactShareNameFound: x+= line

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

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

1
x = ''

您的代码正在操作一个变量x,而从未首先设置它:

1
if exactShareNameFound: x+= line

在函数顶部添加以下行:

1
x = ''

无论如何,代码不会像当前写入的那样工作,因为它试图从以"写入和读取"模式打开的文件中读取;文件指针被设置为文件的结尾,因此,如果不先查找strat,从中读取的数据将永远不会返回数据。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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')而不是大声的"打印"语句尽早退出该函数。