2012-01-21 14 views
1

以下の関数を使用して、ファイルをディレクトリにコピーし、関数が呼び出されたディレクトリに再作成します。私がipythonでコード部分を部分的に実行しているとき、正常に動作しています。ここで関数を呼び出すときに 'subscriptableでない'エラーが発生する

​​

機能

import os 
import shutil 
from find import find 

def recreatefiles(filedir): 
    currdir = os.getcwd() # get current directory 
    dirname = 'maindir' 
    dir = os.path.join(currdir,dirname) 
    if not os.path.exists(dir): 
     os.makedirs(dir) 

    #Copy .in files and create a template 
    filein = find('*.in',filedir) # find is a function created 

    shutil.copy2(filein[0], os.path.join(dir,'template.in')) 

エラーに関するすべてのアイデアは、次のとおりです。しかし、私はそれが私に次のエラーを与えている機能として、それを実行しますか?おかげ

編集:ここでは

import os, fnmatch 
def find(pattern, path): 
    result = [] 
    for root, dirs, files in os.walk(path): 
     for name in files: 
      if fnmatch.fnmatch(name, pattern): 
       if not name.startswith('.'): 
        result.append(os.path.join(root, name)) 
    return result 

EDIT2を見つけるためのコードは次のとおりです。ipython

[1]: filein 
    [2]: ['/home/Projects/test.in'] 

からfileinの出力は基本的には、ただ一つのファイルがあります。私はshutil.copy2でfilein [0]を使用して角括弧を削除しました

+0

おそらく 'find'にエラーがあります。ソースコードを投稿する。 –

+3

このコードで 'type 'object is subscriptable'をどうやって得ることができるのかわかりません。しかし、 'filein'が空であれば' list index of range'を得ることができます。 – NPE

+0

うーん、 'find'は完璧です。私はエラーも見られません。 –

答えて

1

このコードで'type' object is not subscriptableをどうやって得ることができないのでしょうか? 1つのファイルをコピーする)。

これは、実行しているコードがあなたが実行中のコードではないことを示しています。と思っています。実行中です。

私は二つのことをするだろう:

  1. が、それはあなたの質問に表示されるコードは正確であることを確認してください。
  2. これは対話シェルで実行されているようですので、ipythonを終了して再起動してください(先にインポートした古いバージョンのfind()を誤って呼び出す可能性を排除するため)。

側の注意点として、私は明示的にfileinが空のケースを処理したい:現在のコードが例外(list index out of range)を引き上げます。ただ例外は正確にファイルがエラーをトリガ、typeがどのような変数を添字されているコードのどの行を特定することができるようになった後

+0

私の間違い。それは今働いている。私はちょうどipythonからログアウトしました。 – mikeP

0

使用

import pdb 
pdb.pm() 

関連する問題