11

paramiko を使用して自動化されたプロセスがあり、次のエラーが発生します。

Exception in thread Thread-1 (most likely raised during interpreter 
shutdown)

....
....
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 
'error' 

クリーンアップ/スレッド化の問題であることは理解していますが、修正方法がわかりません。

私は最新バージョン (1.7.6) を持っており、このスレッドによると解決されたので、コードを直接ダウンロードしましたが、それでもエラーが発生します。

この障害は、winxp/win2003 の下の Python 2.5/2.6 で発生します。

__del__デストラクタで接続を閉じてから、スクリプトの終了前に接続を閉じますが、どれも機能しません。これを使用すると、以前にエラーが発生したため、インタープリターのシャットダウンとは関係ないのではないでしょうか??

4

3 に答える 3

7

__del__デコンストラクタではありません。オブジェクトの姓を削除するときに呼び出されますが、これは必ずしもインタープリターを終了するときに発生するわけではありません。

接続など、コンテキストを管理するものはすべて、context managerたとえば次のようなものがありますclosing

with closing(make_connection()) as conn:
    dostuff()

# conn.close() is called by the `with`

とにかく、この例外は、インタープリターが既にシャットダウンしている間に、まだその作業を実行しようとしているデーモンスレッドがあるために発生します。

終了する前に実行中のすべてのスレッドを停止するコードを記述することによってのみ、これを修正できると思います。

于 2009-11-16T22:45:44.713 に答える
1

私は今、そうではありません。しかし、私のwxpythonアプリで問題を検索して、このディスカッションを見つけてください。

これを解決して、メインフレームにクローズイベントを追加します。したがって、すべてのスレッドが閉じます。

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(MyFrame, self).__init__(*args, **kwargs)

        # Attributes
        self.panel = MainPanel(self)

        # Setup
        path = os.path.abspath("./comix.png")
        icon = wx.Icon(path, wx.BITMAP_TYPE_PNG)
        self.SetIcon(icon)

        # Layout
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.panel, 1, wx.EXPAND)
        self.SetSizer(sizer)

        self.CreateStatusBar()
        # Event Handlers
        self.Bind(wx.EVT_CLOSE, self.OnClose)

   def OnClose(self, event):
        ssh.close()
        winssh.close()
        event.Skip()

これが誰にも役に立たないことを願っています。

于 2011-07-27T12:28:56.590 に答える
1

__del__@ THC4kが言ったように、ではなく、通常のプログラム制御フローで接続を閉じます。これはデコンストラクタではありません。一般に、使用する必要はありません__del__(もちろん例外があります)。

独自のスレッドを作成している場合、メイン スレッドの終了時にスレッドを正常に終了させるには、.setDaemon(True) が必要です。

于 2009-11-17T16:41:35.393 に答える