我有下面的函数将文件复制到目录中,并在调用函数的目录中重新创建它。当我在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]来删除方括号
答案 0 :(得分:1)
我看不出你如何使用这段代码获得'type' object is not subscriptable
(事实上,我可以在我的计算机上成功运行它并让它复制一个文件)。
这表明您运行的代码不是您认为正在运行的代码。
我会做两件事:
ipython
(以消除您不小心调用之前导入的旧版find()
的可能性)。作为旁注,我明确处理filein
为空的情况:当前代码会引发异常(list index out of range
)。
答案 1 :(得分:0)
使用
import pdb
pdb.pm()
在获得异常之后,能够确切地确定哪个文件中的哪一行代码触发了错误,以及哪个变量是type
正在下载。