2

我有下面的函数,它复制目录中的文件并在调用函数的目录中重新创建它。当我在 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] 来删除方括号

4

2 回答 2

1

我看不出你怎么可能得到'type' object is not subscriptable这个代码(事实上,我可以在我的电脑上成功地运行它并让它复制一个文件)。

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

我会做两件事:

  1. 确保代码与您的问题中出现的完全相同;
  2. 由于您似乎是在交互式外壳中运行它,因此请确保您关闭并重新启动ipython(以消除您不小心调用较早find()导入的旧版本的可能性)。

附带说明一下,我会明确处理filein为空的情况:当前代码会引发异常 ( list index out of range)。

于 2012-01-21T21:08:16.807 回答
0

利用

import pdb
pdb.pm()

就在获得异常之后,才能准确指出哪个文件中的哪一行代码触发了错误,以及type下标的变量是什么。

于 2012-01-21T21:13:47.613 回答