
実現したいこと
例外の発生回数をカウントしたい
前提
ダウンロードをするツールを作っているときに、回線がつながっていないなど
例外が発生します。そこで、例外のところにカウントを設置するのですが、
うまく動作しません。
発生している問題・エラーメッセージ
cannot access local variable 'error_count' where it is not associated with a value
該当のソースコード
python
1 2error_count = 0 3 4 5def download_20230822( url ): 6 html = None 7 try: 8 html = requests.get(url, timeout=10) 9 except requests.exceptions.RequestException as err: 10 msg = "{}: {}".format(type(err), err) 11 print(msg) 12 error_count = error_count + 1 # ここで例外をカウントしているが、エラーメッセージが出る 13 except: 14 pass 15 16 if html is None: 17 print( "download_20230822 で例外が発生しました。" ) 18 19 return html 20 21 22 23... 24 25 26while count <= 100: 27 28 html = "https://google.com" #例として 29 download_20230822( html ) 30 ... 省略 31 32 if error_count > 0: 33 print( "エラーが発生しました。ログを記録しません。") 34 else: 35 print( "ログを記録します。 count:", count ) 36 file = open("log.txt","w") 37 file.write(str(count)) 38 file.close() 39 print( "記録完了" ) 40 41 count = count + 1 42
補足情報(FW/ツールのバージョンなど)
Windows 11 pro
Python 3.x

def download_20230822( url ):
のところの中でエラーカウントが参照できてない可能性があります。引数にエラーカウントを追加して様子を見てください。あとは同じ関数のreturnにエラーカウントを入れた方がいいかもしれません。
def download_20230822( url ,error_count):にして、
return html, error_count にする感じです。
これでこの関数の中でエラーカウントが使えるようになり、計算結果を関数の外でも使えるようになると思います。
解決済みのようですが、公式のFAQ「なぜ変数に値があるのに UnboundLocalError が出るのですか?」に別の方法が載っているので、参考にしてください。
https://docs.python.org/ja/3/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value
参考になりました。ありがとうございます。
C/C++言語の流れで作りました。
グローバル変数で、変数名もかぶらないのでいいだろうと
思ってましたが、python ではローカル変数の方が
強いのですね。
勉強になりました。

回答2件
あなたの回答
tips
プレビュー