Python 3.x 一次尝试中的多个功能
我试图在try/except中运行多个函数,但不确定这是否正确。对于每个函数返回的每个可能的错误,我是否应该有一个exceptPython 3.x 一次尝试中的多个功能,python-3.x,Python 3.x,我试图在try/except中运行多个函数,但不确定这是否正确。对于每个函数返回的每个可能的错误,我是否应该有一个except def connect_to_server(ip, port): try: sock = networking.create_socket() sock.connect((ip, port)) _thread.start_new_thread(recv_data, (sock, )) print("
def connect_to_server(ip, port):
try:
sock = networking.create_socket()
sock.connect((ip, port))
_thread.start_new_thread(recv_data, (sock, ))
print("Connected to on port [" + str(port) + "]")
except:
print("Unable to connect to engine.")
return
return sock
基本上,它是代码风格、可读性和代码长度之间的折衷 最佳做法是尽可能少地调用
try
子句,但是如果多个函数调用引发相同的异常,您可以将它们组合在一起
然而除了之外的裸子句几乎从未被视为良好实践(参见示例)
我将重构上述示例以:
def connect_to_server(ip, port):
try:
sock = networking.create_socket()
sock.connect((ip, port))
except SocketError: # or whatever exception type you expect
print("Unable to connect to engine.")
else:
_thread.start_new_thread(recv_data, (sock, ))
print("Connected to on port [" + str(port) + "]")
return sock
尽管重新引发调用代码的异常以捕获而不是返回隐式的None
,可能更有意义:
def connect_to_server(ip, port):
try:
sock = networking.create_socket()
sock.connect((ip, port))
except SocketError: # or whatever exception type you expect
print("Unable to connect to engine.")
raise
else:
_thread.start_new_thread(recv_data, (sock, ))
print("Connected to on port [" + str(port) + "]")
return sock
您将无法访问return sock
。除非您提出了异常,否则不要使用blanketexcept:
子句。这不是口袋妖怪,你不想捕捉它们的全部,你不想捕捉内存错误、键盘中断或发电机退出信号。第一个异常将被捕获,块的其余部分将不执行。如果这是目标,那么这很好,只需限制你的捕获量。是的。试着把目标定在原子性上,会出现什么例外情况?它所处的例外情况是什么?SocketError?@Doritos是的,raise
引发与except
捕获的异常相同的异常