Ошибка «не по подписке» при вызове функции - PullRequest
2 голосов
/ 22 января 2012

У меня есть функция ниже, которая копирует файл в каталог и воссоздает его в каталоге, где вызывается функция. Когда я запускаю код по частям в 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'))

Есть идеи по поводу ошибки? Спасибо

РЕДАКТИРОВАТЬ: Вот код для поиска

* * 1010

EDIT2: вывод файла из ipython

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

По сути, есть только один файл. Я использовал filein [0] в shutil.copy2, чтобы убрать квадратные скобки

Ответы [ 2 ]

1 голос
/ 22 января 2012

Я не понимаю, как вы можете получить 'type' object is not subscriptable с этим кодом (на самом деле, я могу успешно запустить его на своем компьютере и сделать так, чтобы он копировал один файл).

Это говорит о том, что код, который вы запускаете, не тот код, который вы думаете , который вы используете.

Я бы сделал две вещи:

  1. убедитесь, что код в точности , как указано в вашем вопросе;
  2. , поскольку вы, похоже, запускаете это в интерактивной оболочке, убедитесь, что вы закрыли и перезапустили ipython (чтобы исключить возможность случайного вызова более старой версии find(), которая была импортирована ранее).

Как примечание, я бы явно обработал случай, когда filein пуст: текущий код вызовет исключение (list index out of range).

0 голосов
/ 22 января 2012

используйте

import pdb
pdb.pm()

сразу после получения исключения, чтобы иметь возможность точно определить, какая строка кода в каком файле вызывает ошибку, и какая переменная type подписывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...