「なぜ変数に値があるのに UnboundLocalError が出るのですか?」
「Python では、関数内で参照されるだけの変数は暗黙的にグローバルとなります。 関数の本体のどこかで値が変数に代入されたなら、それは明示的にグローバルであると宣言されない限り、ローカルであるとみなされます」
プログラミング FAQ — Python 3.11.3 ドキュメント https://docs.python.org/ja/3/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value