Что означает эта ошибка и как ее исправить?

Я кодировщик плагинов jython/python bukkit, и я получаю странную ошибку. Я пытаюсь перекодировать что-то, что уже сделано (на Java) в Python... Вот часть кода java:

    HashMap<Player, String> channelList = new HashMap<Player, String>();
    public void useChannel(Player p, String format, String channel){
    if(channel == "main"){
        Bukkit.broadcastMessage(format);
    } else {
          Player[] online = Bukkit.getOnlinePlayers();
          for(int a = 0; a <= online.length - 1; a++){
              if(channelList.get(online[a]) == channel){
                  online[a].sendMessage("*" + format);
              }
          }
    }
}

@EventHandler
public void onChat(AsyncPlayerChatEvent event){
    event.setCancelled(true);
    String channel = event.getMessage().substring(0, 1);
    String userChannel = "";
    switch(channel){
    case "!": userChannel = "spanish";
    case "?": userChannel = "french";
    case "@": userChannel = "dutch";
    case "$": userChannel = "spanish";
    default: userChannel = "main";     
    }
    useChannel(event.getPlayer(), event.getFormat(), userChannel);
}

}

и вот что я сделал в python/jython (имейте в виду, что это может быть не то же самое, и это причина ошибки):

    channelList = HashMap()

    def useChannel(self):
    format = event.player.AsyncPlayerChatEvent.getFormat()    
    if(channel == "main"):
      Bukkit.broadcastMessage(format)
    else:
        online = Bukkit.getOnlinePlayers()
        b = online.lenght - 1
        a = 0
        for a in a <= b:
            if channelList.get(online[a]) == channel:
               online[a].sendMessage("* %s"%format)

def balkanChannel(self):
    userChannel = "balkan"
    return userChannel

def germanChannel(self):
    userChannel = "german"
    return userChannel

@hook.event("player.AsyncPlayerChatEvent", "HIGHEST")
def onAsyncPlayerChatEvent(event):
    event.setCancelled(1)
    channel = event.getMessage().substring(0, 1)
    userChannel = ""  
    try:
       options = {
               '!': pyplugin.balkanChannel,
               '$': pyplugin.germanChannel}
       if value in switch:
          switch[value]() 
       else:
           pass
    except KeyError:
          userChannel = "main"
    pyplugin.useChannel(event.getPlayer(), event.getFormat(), userChannel)

Это плагин, связанный с чатом, который должен при AsyncChatPlayerEvent проверять, есть ли ! или префикс $ в сообщении... Эти префиксы выполняются как «кейсы» в Java, но, насколько мне известно, в Python нет ничего подобного, поэтому я сделал это таким образом (что, возможно, неправильно). ) ?

Вот ошибка, которую я получаю при чате с этими префиксами ($ и!):

14:38:59 [SEVERE] java.util.logging.ErrorManager: 5
>
Exception: org.python.core.PyException thrown from the UncaughtExceptionHandler
in thread "Connection #1 read thread"

Подводя итог, я пытаюсь «перекодировать» вышеприведенный java-код на python, но получаю странную ошибку...

Спасибо за ответы! :)

P.S. сервер зависает после того, как выдает ошибку... Если вам нужна дополнительная информация, просто прокомментируйте...


person Amar Kalabić    schedule 18.11.2013    source источник
comment
в onAsyncPlayerChatEvent что такое value и switch?   -  person Vlad    schedule 19.11.2013
comment
@ Влад, несмотря на это, я только что понял, что всякий раз, когда я использую это событие, возникает одна и та же ошибка? Знаете ли вы, о чем говорит эта ошибка, так как никаких следов нет...   -  person Amar Kalabić    schedule 19.11.2013
comment
с PyException связан traceback, но у меня понятия не имею, как его использовать. Проще всего было бы обернуть все в оператор try с except Exception, e: print e.message в конце.   -  person Vlad    schedule 19.11.2013
comment
@Vlad пробовал так: pastebin.com/EdLERw3Y, но возвращает ту же ошибку..   -  person Amar Kalabić    schedule 19.11.2013
comment
Если вы хотите получить доступ к исключению как e, вам нужно except Exception, e вместо except Exception.   -  person Vlad    schedule 19.11.2013


Ответы (1)


Это была моя ошибка, извините. Я использовал неправильное событие...

Я использовал AsyncPlayerChatEvent вместо обычного PlayerChatEvent...

person Amar Kalabić    schedule 21.11.2013