Найти - Пользователи
Полная версия: Проблемы с selection_list
Начало » Mobile Python » Проблемы с selection_list
1
ipm
Сначало код:


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
ipm
Причина возникновения ошибки в некорректной работе функции unicode()
Вместо
self.PluginsList=unicode(self.PluginsList)
пришлось использовать
for Count in range(0, len(self.PluginsList)):
self.PluginsList[Count]=unicode(self.PluginsList[Count])
т.к.
len(self.PluginsList)
в этих случаях возвращает разные значения
arok
Функция unicode() работает корректно, если ее правильно использовать. И где вы этому научились. Мат часть советую почитать.
ipm
arok
Функция unicode() работает корректно, если ее правильно использовать. И где вы этому научились. Мат часть советую почитать.
Подробнее пожалуйста, а то как-то не информативно и не обосновано.

Разве нельзя применять unicode() к списку? Ведь это тоже обьект.
Но если поэлементно применить, то длина списка не искажается.
sky
в списке могут лежать разные обьекты , поэтому применять unicode к списку нельзя из соображений типобезопасности, не говоря еще и о том что список в памяти разбросан.
unicode можно применять к строкам именно поэтому необходимо поэлементно юникодить)
можешь сделать так
self.PluginsList=
или
self.PluginsList=map(lambda x:unicode(x), PluginsList)
ipm
sky
в списке могут лежать разные обьекты , поэтому применять unicode к списку нельзя из соображений типобезопасности
В мой список попадали только обьекты типа str, но на будущее учту. спасибо!
sky
ipm
sky
в списке могут лежать разные обьекты , поэтому применять unicode к списку нельзя из соображений типобезопасности
В мой список попадали только обьекты типа str, но на будущее учту. спасибо!
это примерно тоже самое что и поделить список..
ты число можешь поделить? а как поделить список?
так же само ты можешь перекодировать строку в юникод а список нет..
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB