2017-08-23 11 views
0

これは簡単な質問のようですが、私はグーグルやStackoverflowから読んでそれを理解することはできません。Tryとexcept文、Python

私の質問は、変数にtry文を使用してリストに追加する方法です。

以下のサンプルでは、​​ファイルリストからpandasを使用してインデックスラベルを取得しようとしています。私はそれぞれを変数に変換し、それらをすべてリストに追加して連結したいと考えています。しかし、私は "parsed_file.loc [" Staff ":" Total Staff "] .copy()"を試して、リストに追加する変数に変換する方法を理解するのに苦労しています。

以下の例では、グローバルスコープでローカルスコープ変数を使用してNameErrorをスローしようとしています。私は関数を使用して関数内で変数を返すことができますが、次に 'TypeError:非NDFrameオブジェクトを連結できません'というメッセージが表示されます。変数を関数内のDataFrameに変換しようとしましたが、同じエラーが返されます。

すべてのファイルにインデックスラベルが付いているわけではないため、except:KeyErrorを使用してファイルをスキップし、ファイルの場所を出力します。

+1

あなたの実際の質問は何ですか?あなたの質問を少しきれいにすることをお勧めします。 – StefanE

+0

'MultiIndex' dfsで作業していない限り、それは有効な' loc'構文ではありません。 –

+0

これはステファンにとって意味がありますか? – Iwan

答えて

1

tryブロック内のすべてが行ごとに実行され、例外が発生すると実行を停止してexceptブロックにジャンプします。だから私はあなたのコードを少し変更して、実行する行に例外がある場合は、Staff_ = parsed_file.loc["Staff" : "Total Staff"].copy()はtryブロック内の残りの行を実行しません。ここに書かれたドキュメントは、試して説明しますPython Try Catch

for file_ in allFiles: 
     parsed_file = read_workbook(file_) 
     parsed_file['filename'] = os.path.basename(file_) 
     parsed_file.set_index(0, inplace = True) 
     parsed_file.index.str.strip() 

     try: 
      Staff_ = parsed_file.loc["Staff" : "Total Staff"].copy() 
      # Line below won't be executed in case of an exception 
      list_.append(Staff_) 
     except KeyError: 
      print(file_) 

frame = pd.concat(list_) 
関連する問題