我试图在其他程序中调用该函数来获取错误,如:
[\'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
答案 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 = ''