私は「何のネットワーク」の例外扱いべきではない以下のデコレータがありますこのpythonデコレータには何が問題なのですか?
class NetworkError(RuntimeError):
pass
def reTryer(max_retries=5, timeout=5):
def wraper(func):
request_exceptions = (
requests.exceptions.Timeout,
requests.exceptions.ConnectionError,
requests.exceptions.HTTPError
)
def inner(*args, **kwargs):
for i in range(max_retries):
try:
result = func(*args, **kwargs)
except request_exceptions:
time.sleep(timeout)
print("Bad or broken connection, trying again...")
continue
else:
return result
else:
raise NetworkError
return inner
return wraper
をしかし、それがすべてでは動作しませんが、でもない「不良または切断された接続、再試行...」出力はありません私のLANアダプターは切断状態ですが、何も表示されません。これはfuncの定義と呼び出しです:
@reTryer(5,5)
def func(arg):
#some code
func(arg)
私に何か不足していますか?
を取得し、あなたは 'inner'機能でタプル' request_exceptions'を定義しようとしましたか? – Frodon
@Frodon何が変わるのですか? – glglgl
@Frodon内部関数は外部関数のスコープ内の変数にアクセスできます。 –