質問するログイン新規登録
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

628閲覧

例外の発生回数をカウントしたい

yukkuri_55

総合スコア272

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/09/02 18:25

編集2023/09/02 18:29

0

0

実現したいこと

例外の発生回数をカウントしたい

前提

ダウンロードをするツールを作っているときに、回線がつながっていないなど
例外が発生します。そこで、例外のところにカウントを設置するのですが、
うまく動作しません。

発生している問題・エラーメッセージ

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/09/02 19:02 編集

def download_20230822( url ): のところの中でエラーカウントが参照できてない可能性があります。引数にエラーカウントを追加して様子を見てください。あとは同じ関数のreturnにエラーカウントを入れた方がいいかもしれません。 def download_20230822( url ,error_count):にして、 return html, error_count にする感じです。 これでこの関数の中でエラーカウントが使えるようになり、計算結果を関数の外でも使えるようになると思います。
yukkuri_55

2023/09/03 03:37

参考になりました。ありがとうございます。 C/C++言語の流れで作りました。 グローバル変数で、変数名もかぶらないのでいいだろうと 思ってましたが、python ではローカル変数の方が 強いのですね。 勉強になりました。
guest

回答2

0

error_count = error_count + 1 # ここで例外をカウントしているが、エラーメッセージが出る

グローバル変数を関数内で更新する時は、global error_countの宣言が必要です。宣言しないとローカル変数と見なされて、今回の場合は未定義変数の参照となります。

公式サイトFAQ:
https://docs.python.org/ja/3/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python

Python のローカルとグローバル変数のルールは何ですか?

Python では、関数内で参照されるだけの変数は暗黙的にグローバルとなります。 関数の本体のどこかで値が変数に代入されたなら、それは明示的にグローバルであると宣言されない限り、ローカルであるとみなされます。

投稿2023/09/03 03:41

otn

総合スコア86367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukkuri_55

2023/09/04 05:58

勉強になりました。
guest

0

自己解決

fourteenlengthさん 回答ありがとうございます。
以下のようなサンプルを作り、想定通り 1 と 2 が表示されました。
解決しました。

g_error_count = 0

def download( url, error_count ):
....error_count = error_count + 1
....htm = ""
....return htm, error_count

htm , g_error_count = download( "hoge", g_error_count )
print( g_error_count )
htm , g_error_count = download( "hoge", g_error_count )
print( g_error_count )

投稿2023/09/02 20:59

yukkuri_55

総合スコア272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問