首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

这个python 代码总是执行到那行就不行了?该怎么解决

2012-05-02 
这个python 代码总是执行到那行就不行了?下面的代码总是执行到:def unknown(self, session, cmd): 这行就

这个python 代码总是执行到那行就不行了?
下面的代码总是执行到: def unknown(self, session, cmd): 这行就不行了
无论我在前面加上import cmd 也是不行

请大家帮我看看下面的有哪些问题?谢谢了





from asyncore import dispatcher
from asynchat import async_chat
import socket, asyncore


PORT = 5005
NAME = 'TestChat'
class EndSession(Exception): pass

class CommandHandler:
? """
? 类似于标准库中的cmd.Cmd的简单命令处理程序
? """
? def unknown(self, session, cmd):
? '响应未知命令'
? session.push('Unknown command: %s\r\n' % cmd)

? def handle(self, session, line):
? '处理从给定的会话中收到的行'
? if not line.strip():return
? #分离命令
? parts = line.split('',1)
? cmd = parts[0]
? try: line = parts[0].strip()
? except IndexError: line = ''
? #试着查找处理程序
? meth = getattr(self, 'do'+cmd.None)
? try:
? #假定它是可以调用的
? meth(session, line)
? except TypeError:
? #如果不可以调用,此代码响应不知的命令
? self.unknown(session, cmd)

? class Room(CommandHandler):
? """
? 包括一个或多个用户的fa型环境,它负责基本的命令处理或广播
? """

? def __init__(self, server):
? self.server = server
? self.sessions = []

? def add(self, session):
? '一个会话(用户)进入房间'
? self.sessions.append(session)

? def remove(self, session):
? '一个会话(用户)已离开房间'
? self.sessions.remove(session)

? def broadcast(self, line):
? '向房间中的所有会话发送一行'
? for session in self.sessions
? session.push(line)

? def do_logout(self, session, liine):
? '响应logout命令'
? raise EndSession


? class LoginRoom(Room):
? """
? 为刚刚链接上的用户准备房间
? """
? def add(self, session):
? Room.add(self, session)
? #当用户进入时,问候他或她:
? self.broadcast('Welcome to %s\r\n' % self.server.name)
? def unknown(self, session, cmd):
? # 所有未知命令(除了login或者logout外的一切)
? #会导至一个警告:
? session.push('Please log in\nUse "login <nick>"\r\n')

? def do_login(self, session, line):
? name = line.strip()
? #确保用户输入了名字
? if not name:
? session.push('please enter a name\r\n')
? #确保用户名没有被使用
? elif name in self.server.users:
? session.push('The name "%s" is taken.\r\n' % name)
? session.push('Please try again.\r\n')
? else:
? #名字没有问题,所以存储在会话中,并且将用户移动到主聊天室
? session.name = name
? session.enter(self.server.main_room)


? class ChatRoom(Room):
? """
? 为多用户聊天准备的房间
? """
? def add(self, session):
? #告诉所有人有新用户进入了房间
? self.broadcast(session.name + 'has entered the room.\r\n'):
? self.server.users[session.name] = session
? Room.add(self, session)

? def remove(self, session):
? Room.remove(self, session)
? #告诉所有人有用户离开
? self.broadcast(session.name + 'has left the room.\r\n')

? def do_say(self, session, line):
? self.broadcast(session.name + ': ' + line+'\r\n')

? def do_look(self, session, line):
? '处理look命令.该命令用于查看谁在房间内'
? session.push('The following are in this room:\r\n')
? for other in self.sessions:
? session.push(other.name + '\r\n')

? def do_who(self, session, line):
? '处理who命令,该命令用于查看谁登陆了'
? session.push('The following are logged in "\r\n')


? for name in self.server.users:
? session.push(name + '\r\n')

? class LogoutRoom(Room):
? """
? 为单用户准备的简单房间,只用于将用户名从服务器移除
? """
? def add(self, session):
? #当会话(用户)进入要删除的LogoutRoom时
? try: del self.server.users[session.name]
? except KeyError: pass

? class ChatSession(async_chat):
? """
? 单会话,负责与用户通信.
? """
? def __init__(self, server,sock):
? async_chat.__init__(self, sock)
? self.server = server
? self.set_terminator("\r\n")
? self.data = []
? self.name = None
? #所有的会话都开始于单独的LoginRoom中.
? self.enter(LoginRoom(server))

? def enter(self, room):
? #从当前房间中移除自身(self),并将自身添加到下一个房间
? try: cur = self.room
? except AttributeError: pass
? else: cur.remove(self)
? self.room = room
? room.add(self)

? def collect_incoming_data(self, data):
? self.data.append(data)

? def found_terminator(self):
? line = ''.join(self.data)
? self.data = []
? try: self.room.handle(self, line)
? except EndSession:
? self.handle_close()

? def handle_close(self):
? async_chat.handle_close(self)
? self.enter(LoginRoom(self.server))

? class ChatServer(dispatcher):
? """
? 只有一个房间的聊天服务器
? """
? def __init__(self, port, name):
? dispatcher.__init__(self)
? self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
? self.set_reuse_addr()
? self.bind(('', port))
? self.listen(5)
? self.name = name
? self.users = {}
? self.main_room = ChatRoom(self)

? def handle_accept(self):
? conn, addr = self.accept()
? ChatSession(self, conn)

? if __name__ = '__main__':
? s = ChatServer(PORT, NAME)
? try: asyncore.loop()
? except KeyboardInterrupt: print


[解决办法]
LZ先把单引号注释改下,然后代码格式发出来吧
[解决办法]

Python code
python讲究缩进,把代码像这样贴出来
[解决办法]
代码标签是[code=Python][/code],或者你可以点一下插入源代码按钮后再操作...
[解决办法]
不用贴了。你贴这么多东西,别说有缩进错误,就算没有缩进错误也没人看。你还是先把问题说清楚吧。

热点排行