2017-08-17 1 views
0

私のプログラムが外部プログラムから受信ログファイルを読み込もうとしています。プログラムは関数を実行してから、10秒ごとに繰り返す予定です。プログラムはいくつかの反復でうまく動作し、私に 'ValueError:max()argが空のシーケンスです'というメッセージを表示します。エラー例外を渡そうとしましたが、理解が不足していて、ValueError:max()argは、特定のループでのみ空のシーケンスです

受信ログファイルは一様な行列ではなく、サイズが変更される可能性があるため、空の結果に0を代入して操作できるようにするために、最大長とゼロ行列を作成します。

CheckFile = 0 
CurrentFile = 0 

def MyFunction(): 
    from datetime import datetime 
    global CheckFile 
    global CurrentFile 
    month = datetime.now().strftime('%B') 
    path = os.path.join(r'C:\MyFilePath',month) #I add month because the files change location each month 
    os.chdir(path) 

    for i in os.listdir(path): 
     if os.path.isfile(os.path.join(path,i)) and 'StartOfFileName$}' in i: 
      filelist = [i] 

    Filehandle = filelist[0]  
    strFile = str(File_3min) 
    CurrentFile = strFile[14:44] 
    Current = CurrentFile 

    if Current != CheckFile: # This statement checks to make sure that the log files are always new 

     with open(Filehandle ,'r') as Filehandle : 
      lines = [line.strip().split(',') for line in Filehandle ] 

     max_len = max(len(line) for line in lines) 
     my_array = np.zeros([len(lines),max_len]) 

     for i, line in enumerate(lines): 
      my_array[i, :len(line)] = line 

    else: 
     return 

schedule.every(10).seconds.do(MyFunction) 


while 1: 
    schedule.run_pending() 
    time.sleep(1) 

エラーがラインから生じる:あなたは、簡単なデバッグのための空のリストlines

を持ってMAX_LEN = MAX(行の行のために(ライン)LEN)

+2

開いているファイルは空ですので、 'lines == []' ...処理しないでください。多分、もしあなたは3.4+を使用していますが、 'default = 0'を' max'に渡すことができます。そして残りのコードは実行されますが、効果的にノーオペレーションになります。どんなスイートでも最も理にかなっています。 –

+0

ファイルはすべてその中にデータを持っています。私はエラーの直後にすべてをチェックしました。ありがとう私はpython 3.6を使用しているので、0としてデフォルトを渡します –

+0

[mcve]を見てください。現在のところ、あなたの例は最小限ではなく、再現性がなく、期待される動作が欠けています。それはあなたの質問に役立つ答えを与えることを非常に難しくします。 – MSeifert

答えて

0

print (len(lines))

を追加しよう
print (len(lines)) 
max_len = max(len(line) for line in lines) 
関連する問題