Уведомления

Группа в Telegram: @pythonsu

#1 Июль 26, 2009 04:28:26

ipm
От:
Зарегистрирован: 2009-07-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с selection_list

Сначало код:


class PluginClass:
def __ListDir__(self):
self.PluginsDir=u'C:\\Plugins\\'
self.PluginsList=
AllFiles=os.listdir(self.PluginsDir) # Получаем все файлы из директории с плагинами
Count=0
while Count!=len(AllFiles): # Перебираем все найденные файлы
Count+=1
if os.path.isfile(os.path.join(self.PluginsDir,AllFiles))==1: # Если это файл, а не директория
if os.path.splitext(AllFiles)==u'.py': # и имеет расширение .py
self.PluginsList.append(AllFiles) # то заносим в список плагинов

def GetPluginFromList(self):
self.__ListDir__() # Ищем плагины
if len(self.PluginsList)==0: # Если плагинов не нашли
appuifw(u'No one plugin avialable.',u'error') # ругаемся
return # и выходим
else: # Если нашли плагины
self.PluginsList=unicode(self.PluginsList)
global ActivePlugin
print(u'Debug 1') # ВЫПОЛНЯЕТСЯ
ActivePlugin=appuifw.selection_list(self.PluginsList) # ОШИБКА ЗДЕСЬ, НО РУГАЕТСЯ НА ВЫЗОВ GetPluginFromList()
print(u'Debug 2') # СООТВЕТСТВЕННО НЕ ВЫПОЛНЯЕТСЯ

def RunPlugin(self,PluginName):
appuifw.note(u'This function is not active yet')


……


class MenuClass:

……

def __SelectPlugin__(self):
global Running
global ActivePlugin
OldActivePlugin=ActivePlugin # Сохраняем прежний выбор
if Running==True: # Если сервер запущен
self.Plugin.GetPluginFromList() # Выбираем плагин
if ActivePlugin==u'': # Если не выбрали
if OldActivePlugin!=u'': # Но есть прежний выбор
ActivePlugin=OldActivePlugin # Восстанавливаем
else: # Если плагин был выбран
self.Server.Stop() # Перезапустим сервер
self.Server.Start()
else: # Если сервер не запущен
self.Plugin.GetPluginFromList() # Выбираем плагин РУГАЕТСЯ НА ЭТОТ ВЫЗОВ
if ActivePlugin==u'': # Если не выбрали
if OldActivePlugin!=u'': # Но есть прежний выбор
ActivePlugin=OldActivePlugin # Восстанавливаем


Не ругайте за большое количество лишнего кода, может быть ошибка в нем.

Проблема явно в selection_list - если посмотреть содержание self.PluginsList,
то там находится содержимое папки C:\\Plugins\\ в виде списка из юникод-строк
Но при передаче списка в appuifw.selection_list,
интерпретатор ругается на вызов GetPluginFromList(),
выводится первая дебаговая строка, вторая молчит

Ошибка явно глупая, но раскрыть ее не могу уже более 10 часов!

Symbian 8.1 Python 1.4.5



Офлайн

#2 Июль 26, 2009 17:52:26

ipm
От:
Зарегистрирован: 2009-07-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с selection_list

Причина возникновения ошибки в некорректной работе функции unicode()
Вместо

self.PluginsList=unicode(self.PluginsList)
пришлось использовать
for Count in range(0, len(self.PluginsList)):
self.PluginsList[Count]=unicode(self.PluginsList[Count])
т.к.
len(self.PluginsList)
в этих случаях возвращает разные значения



Офлайн

#3 Июль 26, 2009 23:44:45

arok
От:
Зарегистрирован: 2008-01-15
Сообщения: 145
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с selection_list

Функция unicode() работает корректно, если ее правильно использовать. И где вы этому научились. Мат часть советую почитать.



Офлайн

#4 Июль 27, 2009 00:36:36

ipm
От:
Зарегистрирован: 2009-07-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с selection_list

arok
Функция unicode() работает корректно, если ее правильно использовать. И где вы этому научились. Мат часть советую почитать.
Подробнее пожалуйста, а то как-то не информативно и не обосновано.

Разве нельзя применять unicode() к списку? Ведь это тоже обьект.
Но если поэлементно применить, то длина списка не искажается.



Офлайн

#5 Июль 27, 2009 02:26:52

sky
От:
Зарегистрирован: 2008-05-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с selection_list

в списке могут лежать разные обьекты , поэтому применять unicode к списку нельзя из соображений типобезопасности, не говоря еще и о том что список в памяти разбросан.
unicode можно применять к строкам именно поэтому необходимо поэлементно юникодить)
можешь сделать так
self.PluginsList=
или
self.PluginsList=map(lambda x:unicode(x), PluginsList)



Отредактировано (Июль 27, 2009 02:28:24)

Офлайн

#6 Июль 27, 2009 10:36:07

ipm
От:
Зарегистрирован: 2009-07-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с selection_list

sky
в списке могут лежать разные обьекты , поэтому применять unicode к списку нельзя из соображений типобезопасности
В мой список попадали только обьекты типа str, но на будущее учту. спасибо!



Офлайн

#7 Июль 27, 2009 20:13:30

sky
От:
Зарегистрирован: 2008-05-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с selection_list

ipm
sky
в списке могут лежать разные обьекты , поэтому применять unicode к списку нельзя из соображений типобезопасности
В мой список попадали только обьекты типа str, но на будущее учту. спасибо!
это примерно тоже самое что и поделить список..
ты число можешь поделить? а как поделить список?
так же само ты можешь перекодировать строку в юникод а список нет..



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version