Я Jython/Python Bukkit плагин кодировщик, и я получаю странные ошибки .. Я пытаюсь перекодировать то, что уже сделано (в Java) в Python ... Вот ява часть кода:Что это за ошибка и как ее исправить?
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 проверить, есть ли! или $ prefix в сообщении ... Эти префиксы выполняются как «случаи» в 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. сервер зависает после ошибки spitts ... Если вам нужна дополнительная информация, просто комментарий ...
в 'onAsyncPlayerChatEvent', какие' 'value' и switch'? – Vlad
@ Vlad, независимо от того, я просто понял, что это вызывает одну ошибку, когда я использую это событие? Знаете ли вы, о чем говорит эта ошибка, поскольку нет никаких следов ... –
«PyException» имеет [traceback] (http://www.jython.org/javadoc/org/python/core/PyException.html #traceback), но я не знаю, как его использовать. Проще всего сделать, что вы можете обернуть все в инструкции 'try' с помощью' except Exception, e: print e.message' в конце. – Vlad