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