Я кодировщик плагинов 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. сервер зависает после того, как выдает ошибку... Если вам нужна дополнительная информация, просто прокомментируйте...
onAsyncPlayerChatEvent
что такоеvalue
иswitch
? - person Vlad   schedule 19.11.2013PyException
связан traceback, но у меня понятия не имею, как его использовать. Проще всего было бы обернуть все в операторtry
сexcept Exception, e: print e.message
в конце. - person Vlad   schedule 19.11.2013e
, вам нужноexcept Exception, e
вместоexcept Exception
. - person Vlad   schedule 19.11.2013