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 = ''

コードは、「書き込みおよび読み取り」モードで開かれたファイルから読み取ろうとするため、現在書かれているようには機能しません。ファイルポインタはファイルの最後に設定されているため、最初にストラトにシークしない限り、ファイルからの読み取りは決してデータを返しません。

この関数は、さらにクリーンアップを行うことができます。

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)

「エラー」メッセージが発生するタイミングは不明です。いずれにせよ、大声で「print」ステートメントの代わりに使用raise ValueError('error message')して、関数を早期に終了します。

于 2013-07-16T09:57:13.737 に答える