1. ホーム
  2. python

[解決済み] 最大回数まで何かを試す pythonic な方法はありますか?重複

2023-01-11 13:49:32

質問

私は、共有Linuxホスト上のMySQLサーバにクエリを実行するPythonスクリプトを持っています。何らかの理由で、MySQL へのクエリはしばしば "server has gone away" エラーを返します。

_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')

直後にクエリを再実行すると、通常は成功します。そこで、私は、クエリを実行しようとし、失敗した場合、一定の回数まで再試行するための賢明な方法がパイソンにあるかどうかを知りたいと思います。おそらく、私はそれが完全にあきらめる前に5回を試してみたいと思っています。

私が持っているコードの種類は以下のとおりです。

conn = MySQLdb.connect(host, user, password, database)
cursor = conn.cursor()

try:
    cursor.execute(query)
    rows = cursor.fetchall()
    for row in rows:
        # do something with the data
except MySQLdb.Error, e:
    print "MySQL Error %d: %s" % (e.args[0], e.args[1])

明らかにexcept節で別の試みをすることで可能ですが、それは信じられないほど醜いですし、これを達成するためのまともな方法があるはずだと感じています。

どのように解決するのですか?

どうでしょう。

conn = MySQLdb.connect(host, user, password, database)
cursor = conn.cursor()
attempts = 0

while attempts < 3:
    try:
        cursor.execute(query)
        rows = cursor.fetchall()
        for row in rows:
            # do something with the data
        break
    except MySQLdb.Error, e:
        attempts += 1
        print "MySQL Error %d: %s" % (e.args[0], e.args[1])