4

私はPythonとプログラミング全般にかなり慣れていないので、おそらく簡単な質問ですが、現在、私のプログラムの改善に取り組んでおり、例外がキャッチされた場合にプログラムを続行する方法を理解できません。多分私はそれを間違った方法で見ていますが、例えば私はこれらの線に沿って何かを持っています:

    self.thread = threading.Thread(target=self.run)
    self.thread.setDaemon(True)
    self.thread.start()

    def run(self):
        logging.info("Starting Awesome Program") 
        try:
            while 1:
                awesome_program(self)
    except:
        logging.exception('Got exception on main handler')
        OnError(self)

    def OnError(self):
        self.Destroy()

明らかに、私は現在、エラーに達したときにプログラムを強制終了しています。awesome_programは、基本的にpyodbcを使用して、リモートデータベースに接続してクエリを実行します。この問題は、接続が失われたときに発生します。例外をキャッチしないと、プログラムがフリーズするだけなので、プログラムを強制終了する上記のように設定しますが、手動で再起動する人がいない場合、これは必ずしも理想的ではありません。プログラムを実行し続けるか、再プログラムする簡単な方法はありますか?構文が間違っていたり、プログラミングスキルが不十分だったりした場合は、遠慮なく私を怒らせてください。私は自分自身を教えようとしていますが、まだ非常に初心者であり、理解していないか、おそらく正しく行っていないことがたくさんあります。必要に応じて、さらに多くのコードを投稿できます。圧倒されることなく、どれだけ投稿すればいいのかわからなかった。

4

3 に答える 3

4

ループ内で例外をキャッチし、例外がキャッチされた場合でも続行します。

def run(self):
        logging.info("Starting Awesome Program") 
        while 1:
            try:
                awesome_program(self)
            except:
                logging.exception('Got exception on main handler')
                OnError(self)

ところで:

  • インデントがめちゃくちゃになっているようです。
  • 私は好きwhile Trueです。PythonboolにはCとは異なり型があるため、boolが予想される場合は、boolをwhile指定します。
于 2013-02-04T20:48:18.427 に答える
3

あなたはこれを探しています:

def run(self):
     while True:
         try:
             do_things()
         except Exception as ex:
             logging.info("Caught exception {}".format(ex))
于 2013-02-04T20:50:07.933 に答える
1

Pythonの例外処理、特にを見てくださいTry...Except。これにより、特定のエラーをキャッチして処理できますが、適切なものを選択した場合でも、可能であれば完全に無視することもできます。例えば:

try:
    while something == True:
        do_stuff()
except ExceptionType:
    print "Something bad happened!" #An error occurred, but the script continues
except:
    print "Something worse happened!"
    raise #a worse error occurred, now we kill it
do_more_stuff()
于 2013-02-04T20:50:40.590 に答える