2016-11-11 8 views
1

私はPythonの初心者です。私はファイルから特定の単語を見つけようとしていて、成功の値を返すか、失敗します。このスクリプトは、キーワードが見つかった場合には機能しますが、キーワードが見つからない場合は機能しません。お手伝いありがとう。ここでファイル内の特定の単語を検索して論理結果を返します

def check(): 
    datafile = open('data\CR_Daily201611070011.log') 
    for line in datafile: 
     if 'End of CR_Daily' in line: 
      found = True 
      break 
    return found 

found = check() 
if found: 
    print ("Success") 
else: 
    print ("Fail") 

キーワードが見つからない場合、結果である:

Traceback (most recent call last): 
File "file_reader.py", line 26, in <module> 
found = check() 
File "file_reader.py", line 24, in check 
return found 
UnboundLocalError: local variable 'found' referenced before assignment""" 

+0

エラーメッセージを読んだことがありますか?それについては何が分かりませんか? 'found'の値を設定する必要があります(例えば' False') – Julien

+0

私はそれを読んだが、何をすべきかまだ分かりません。それは今働いている。ありがとう。 – Indomart

答えて

1

あなたの問題あなたは決してそれはfoundです。あなたの関数では、if文は実行されません。つまり、foundは決して作成されません。これが「デフォルト」の値は、あなたの関数内で使用する前に、foundを与えることによって固定することができ

>>> if False: 
     abc = True 


>>> abc 
Traceback (most recent call last): 
    File "<pyshell#3>", line 1, in <module> 
    abc 
NameError: name 'abc' is not defined 
>> 

def check(): 
    found = False 
+0

ありがとうございます。それは今働いている。 – Indomart

+0

@Indomartあなたの歓迎!しかし、あなたが知っておくべきことは、[ここでスタックオーバーフローアップ投票は、感謝を表示するために使用される](http://meta.stackexchange.com/questions/126180/is-it-acceptable-to-write-a-thank-you -in-a-comment)。 –

0

ちょうどあなたのcheck()の初めにfound値を指定します。

def check(): 
    found = False 
    ... 
+0

ありがとうございます。それは働いている。 – Indomart

0

あなたは割り当てる必要はありません。この動作は、短い例で実証することができます値が見つかりました。あなたは、 'CR_Dailyの終わり'が見つかった場合に真のを返すことができ、forの後にFalseを返します。

def check(): 
    datafile = open('data\CR_Daily201611070011.log') 
    for line in datafile: 
     if 'End of CR_Daily' in line: 
      return True 
    return False 

found = check() 
if found: 
    print ("Success") 
else: 
    print ("Fail") 
+0

ありがとうございます。これも私のために働く。 – Indomart

関連する問題