Try-and-except返回错误,但是当不执行时,是否不会发生错误



以下是出现问题的代码:

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")

最新更新