2016-04-14 5 views
0

私は自動化された手順のスクリプトを書いています。このテストでは、Paramikoを介したSSH接続が使用されますが、何らかの理由で(システム関連)システムのリブートが行われ、SSH接続が閉じられます。 Pythonは、接続が強制的に閉じられたというエラーをスローします。Pythonが例外文を破棄して続行します

私は、プログラムがエラーをcatchするexcept文で、ssh接続を復元してから最初にエラーが発生した場所から続行します。

コードを投稿することあまりにも長いですが、基本的に、私は次の操作を実行するために探しています:

try: 
     dotesting() 
except ParamikoError(): 
     restoressh() 
     #here i want to break out and get back into dotesting() 

私は、これは「後藤」はひんしゅくを買うと利用できていないことを考えれば可能であるか分かりませんPythonで。これをどうやって実行するのですか?

EDIT
だから私がもともとしたいことはできません。今Imは本当にくだらない答えはあなたのプログラムを書き、次に文字列のリストとして保存することですdotesting()

def dotesting(): 
     try: 
      stepone() 
     except ParamikoError(): 
      #Need to restart step here, want to flow into steptwo() below 
     try: 
      steptwo() 
     except ParamikoError(): 
      #Need to restart step here, want to flow into the return statement below 
     return("Success") 
+0

例外が発生した場所に戻ることはできません。あなたはたいてい*再起動* 'dotesting()'することができます。そのためにループを使用するだけです。 –

+3

そうでなければ、各ステップで例外をキャッチしてそのステップだけを再開できるように、SSH上で実行しているステップを打ち破るために 'dotesting()'をリファクタリングする必要があります。 –

+0

@MartijnPietersこれは理にかなっています。私はこれが私のケースではうまくいくかもしれないので、あなたが作った提案を反映するために質問を更新しました – bladexeon

答えて

0

内の特定のステップを再起動するにフォーカスをシフトし、リストの各項目は、あなたのプログラムのラインです。次に、次のようなことをしてください:

i =0 
while i<len(program) 
try: 
    eval(program[i]) 
    i+=1 
except ParamikoError(): 
    pass 

私が言ったように、非常に低俗な解決策ですが、私は何か良いとは思いません。

+0

なぜ文字列ですか?なぜオブジェクトを機能させないのですか?それらをリストに入れて、それぞれを呼び出して、ssh接続を渡してください。 –

0

sshインタフェースをモックするたびに例外がスローされない場合。それ以外の場合は、次のようにすることができます。

def stepone(): 
    raise AttributeError 

def steptwo(): 
    return 1 

class TestStuff(unittest.TestCase): 

    def test_steps(self): 
     with self.assertRaises(AttributeError): 
      stepone() 
     self.assertEquals(steptwo(), 1) 

if __name__ == '__main__': 
    unittest.main() 
関連する問題