调用函数时出错'not subscriptable'

时间:2012-01-21 20:41:58

标签: python copy shutil

我有下面的函数将文件复制到目录中,并在调用函数的目录中重新创建它。当我在ipython中按部分运行代码时,它运行正常。但是,当我将其作为函数执行时,它会给我以下错误:

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

TypeError: 'type' object is not 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输出filein

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

基本上,只有一个文件。我在shutil.copy2中使用了filein [0]来删除方括号

2 个答案:

答案 0 :(得分:1)

我看不出你如何使用这段代码获得'type' object is not subscriptable(事实上,我可以在我的计算机上成功运行它并让它复制一个文件)。

这表明您运行的代码不是您认为正在运行的代码。

我会做两件事:

  1. 确保代码完全,因为它出现在您的问题中;
  2. 因为您似乎是在交互式shell中运行它,所以请确保关闭并重新启动ipython(以消除您不小心调用之前导入的旧版find()的可能性)。
  3. 作为旁注,我明确处理filein为空的情况:当前代码会引发异常(list index out of range)。

答案 1 :(得分:0)

使用

import pdb
pdb.pm()

在获得异常之后,能够确切地确定哪个文件中的哪一行代码触发了错误,以及哪个变量是type正在下载。