“while”循环是否可以尝试使用除外?

时间:2014-02-24 11:21:17

标签: python

所以我有一个尚未完成的脚本,但我希望能够让它一直尝试连接到服务器,直到它最终成功(使用paramiko库)。简单来说,这就是我的代码:

canConnect = False
while canConnect == False:
    try:
        stdin, stdout, stderr = ssh.exec_command('ps')
        if stdout.read():
            canConnect = True
        else:
            # cannot connect
            time.sleep(20)
    except:
        # cannot connect
        time.sleep(20)

现在......这对于一个简单的if语句来说是非常基本的但是变得更复杂,因为我需要使用“try”和“except”。如果代码可以成功连接(使用“ps”作为返回内容的随机命令并证明服务器是可连接的),我假设它进入if条件,然后将canConnect设置为True并停止循环。如果它无法连接,我认为Paramiko会抛出一个异常(我把“else”命令放在那里以防万一)但是一旦它击中“except”,它应该等待20秒然后我假设while语句将采取代码回到开始并重新开始?到目前为止,我目睹的是某种类型的循环正在发生,但它实际上似乎并没有尝试连接到服务器。

另外,一个不相关的问题,文档很少但是我假设Paramiko /有/取这样的3个参数来执行exec_command(不管分配的变量,它们将按顺序采用标准输出In,Out,Err?) ?我还假设除了列表或方法调用之外,将多个逗号分隔的变量分配给类似的东西是不常见的吗?

1 个答案:

答案 0 :(得分:1)

我认为你使用except:可能会掩盖真正的问题,因为它会捕获所有异常,并忽视它们。这可以解释some kind of loop is happening, but it doesn't actually appear to be attempting to connect to the server行为。考虑将其改为:

except (paramiko.SSHException, socket.error)