crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Ошибки при работе с файлами и каталогами, Python
zuze
  опции профиля:
сообщение 20.3.2013, 8:32
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я делаю так:

#Глобальные переменные
NF = None
dir = os.path.join(os.getcwd(), "file") # Выбор текущей директории с файлами

# В функции пишу
global dir
global NF
os.chdir(dir)
fp = open(NF[frame], 'rb')


А в результате выдаётся ошибка: TypeError: 'NoneType' object is unsubscriptable
Может это из-за того, что я сделал глобально NF = None? Я только хотел обнулить глобальный двухмерный массив.

Сообщение отредактировал zuze - 20.3.2013, 15:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 20.3.2013, 8:40
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(zuze @ 20.3.2013, 9:32) *
Может это из-за того, что я сделал глобально NF = None? Я только хотел обнулить глобальный двухмерный массив.
А для чего ты это делаешь?
Пустой список указывается так:
NF = []          # Создаем пустой список
NF.append(frame) # добавляем в него что нужно
# ...
NF = 'string' # Теперь это строка, а список уничтожится сборщиком мусора
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 8:52
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 20.3.2013, 8:40) *
А для чего ты это делаешь?


Так как я испоьзую NF в нескольких функциях и не заморачиваюсь пока чтобы передавалась в виде параметра, хотя и понимаю что это лучше. Мне пока важна скорость создания, оптимизировать я потом буду.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 9:47
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как я понял это ошибка говорит о том, что массив NF пустой. Но почему ведь я его в начале заполняю?
И если я выведу на экран
print NF[frame]

То прикрасно выводится имя первого файла.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 20.3.2013, 10:02
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Эта ошибка говорит о том, что объект NF вообще не массив.
Видимо эта функция вызывается раньше, чем заполняется массив.

Чтобы создать пустой массив(список):
Цитата
Пустой список указывается так:
NF = [] # Создаем пустой список
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 10:42
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 20.3.2013, 10:02) *
Чтобы создать пустой массив(список):

Пустой список указывается так:
NF = [] # Создаем пустой список


Я так сделал, но это не помогло.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 20.3.2013, 11:31
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Приведите код программы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 12:09
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 20.3.2013, 11:31) *
Приведите код программы.


#Глобальные переменные
NF = []
dir = os.path.join(os.getcwd(), "file") # Выбор текущей директории с файлами

# В функции пишу
global dir
global NF
os.chdir(dir)
fp = open(NF[frame], 'rb')


Но ошибка уже другая: IndexError: list index out of range
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 20.3.2013, 12:56
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


А где заполнение? И в каком порядке вызываются функции?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 20.3.2013, 13:10
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 20.3.2013, 12:56) *
А где заполнение? И в каком порядке вызываются функции?


При нажатии на кнопку
def MyNameFile(self):
        NF = os.listdir(dir) # Список файлов и поддиректорий в данной директории
        indexFile = 0

        for name in NF:
            indexFile = indexFile + 1


Вызываю так в конструкторе

self.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.MyNameFile)


А открываю файл я в таймере он запускается при нажатии на кнопку. Конечно я нажимаю раньше на кнопку, где заполняется NF именами файлов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 14.11.2024, 7:29