以下是出现问题的代码:
def connect(self):
self.chatlog['state'] = NORMAL
self.chatlog.insert(END, ("===ATTEMPTING TO CONNECT TO SERVERn"))
self.chatlog['state'] = DISABLED
self.chatlog.yview(END)
try:
s.connect((host,port))
self.chatlog['state'] = NORMAL
self.chatlog.insert(END, ("===CONNECTED TO SERVERn"))
self.chatlog['state'] = DISABLED
self.chatlog.yview(END)
self.conn=True
print("Connected")
except ConnectionRefusedError:
self.chatlog['state'] = NORMAL
self.chatlog.insert(END, ("===SERVER COULD NOT BE FOUNDn" + "===PLEASE MAKE SURE THE SERVER IS ON, AND YOU'RE CONNECTED TO THE NETWORKn"))
self.chatlog['state'] = DISABLED
self.chatlog.yview(END)
else:
self.chatlog['state'] = NORMAL
self.chatlog.insert(END, ("===THERE'S AN ERROR WITH THE PROGRAMn" + "===PLEASE TURN IT OFF AND ON AGAINn"))
self.chatlog['state'] = DISABLED
self.chatlog.yview(END)
当我连接到服务器时,它会同时连接("try"部分很好地完成,print语句会出现),但"else"部分也会出现。我似乎找不到原因。有人知道是什么原因造成的吗?
编辑:我应该说,当我删除"else:"部分时,它也很好。
我猜您试图在这里捕获所有异常,但这不是正确的语法。
正确的方法是:
try:
# do something dangerous
except ConnectionRefusedError:
# handle known error
except:
# handle unknown error
在这种情况下,else
意味着如果没有出现错误,代码将被执行。
try: except: else: finally:
块的else
部分类似于if: else:
中的else
,有效地:
if someerror:
...
else:
...
else
块在没有从try
块引发错误时运行。使用此块可以使try
块中的代码最小化;在您的情况下:
try:
s.connect((host,port))
except ConnectionRefusedError:
self.chatlog['state'] = NORMAL
self.chatlog.insert(END, ("===SERVER COULD NOT BE FOUNDn" + "===PLEASE MAKE SURE THE SERVER IS ON, AND YOU'RE CONNECTED TO THE NETWORKn"))
self.chatlog['state'] = DISABLED
self.chatlog.yview(END)
else:
self.chatlog['state'] = NORMAL
self.chatlog.insert(END, ("===CONNECTED TO SERVERn"))
self.chatlog['state'] = DISABLED
self.chatlog.yview(END)
self.conn=True
print("Connected")