2013-07-16 3 views
0

Я пытаюсь вызвать функцию в другой программе, получая ошибку, как:[ «UnboundLocalError», [ «локальная переменная„х“обращаться до присваивания»]]

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

ответ

1

Ваш код манипулирует переменной x никогда не устанавливая его первым:

if exactShareNameFound: x+= line 

Добавить тыс е следующую строку в верхней части функции:

x = '' 

код не будет работать, как в настоящее время написано все равно, потому что он пытается прочитать из файла, открытого в режиме «читать и писать»; указатель файла установлен в конец файла и, таким образом, чтение из него никогда не вернет данные, не обращаясь сначала к страту.

Функция может сделать с некоторыми более очистки:

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') вместо громких «печатных» заявлений для выхода из функции в начале в любом случае.

1

В python и почти на всех других языках программирования вы не можете изменить значение в переменной, если вы не объявите его.

в вашем коде:

if exactShareNameFound: x+= line

вы не объявлял х, но вы имеете в виду этого в строке выше.

Если вы хотите добавить значение line к x, а затем объявить переменную x перед использованием, например, так:

x = '' 
Смежные вопросы