【Error】local variable 'xxx' referenced before assignment

本文深入探讨了Python中全局变量和局部变量的区别及作用域,包括内部函数如何访问和修改这些变量,并解释了访问全局变量时可能遇到的错误。通过实例演示了在函数中修改同名全局变量的正确方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此种错误涉及到变量的作用域,即全局变量和局部变量的操作。

总结如下:

  • 内部函数,不修改全局变量可以访问全局变量

  • 内部函数,修改同名全局变量,则python会认为它是一个局部变量

  • 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError

在程序中设置的 sum 属于全局变量,而在函数中没有 sum 的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样 python 就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR或者Unbound-LocalError,这取决于python版本。)

如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum的定义和赋值,所以报错。

访问全局变量
sum = 5
def add(a=1,b=3):
    print a,b
    print sum #仅仅访问 
>>add(4,8)
>>print sum

--------------
>> 5
>> 5
修改同名的全局变量,则认为是局部变量
sum=5
def add(a=1,b=3):
    print a,b

>>add(4, 8)
>>4,8
>>12
修改同名的全局变量前已经引用则报错
sum=5
def add(a=1,b=3):
    print a,b
    print sum
    sum = a + b
    print sum

>> add(4, 8)
>> 报错。。。

如何修改使其不报错呢,那就在修改全局变量之前使用全局关键字gloabal声明即可:global sum

转载于:https://www.cnblogs.com/nju2014/p/5528072.html

Traceback (most recent call last): File "/app/visualize.py", line 759, in run_visualization analysisfile = pd.read_csv( File "/usr/local/lib/python3.10/dist-packages/pandas/util/_decorators.py", line 311, in wrapper return func(*args, **kwargs) File "/usr/local/lib/python3.10/dist-packages/pandas/io/parsers/readers.py", line 680, in read_csv return _read(filepath_or_buffer, kwds) File "/usr/local/lib/python3.10/dist-packages/pandas/io/parsers/readers.py", line 575, in _read parser = TextFileReader(filepath_or_buffer, **kwds) File "/usr/local/lib/python3.10/dist-packages/pandas/io/parsers/readers.py", line 933, in __init__ self._engine = self._make_engine(f, self.engine) File "/usr/local/lib/python3.10/dist-packages/pandas/io/parsers/readers.py", line 1217, in _make_engine self.handles = get_handle( # type: ignore[call-overload] File "/usr/local/lib/python3.10/dist-packages/pandas/io/common.py", line 789, in get_handle handle = open( FileNotFoundError: [Errno 2] No such file or directory: '/log_data/1.3.26-2132/stats_without_nalimov_outlier_1.3.26-2132.csv' 2025-03-21 15:34:37,123:INFO:cumulative plot 2025-03-21 15:34:37,123:ERROR:cant generate histogram plots (no analysisfile due to no db entry or not enough data) Traceback (most recent call last): File "/app/visualize.py", line 835, in run_visualization return cumulative_plot(analysis_folder, image_folder, analysisfile) UnboundLocalError: local variable 'analysisfile' referenced before assignment 2025-03-21 15:34:37,123:INFO:performed cyclic generation of outlier and statistic plots for 1.3.26-2132 Finished outlier calculation! 2025-03-21 15:34:37,123:INFO:Outlier calculation for 1.4.8-480.10.320+ETD 2025-03-21 15:34:37,123:INFO:Starting Cyclic Data Generation for 1.4.8-480.10.320+ETD Generating Outlier for 1.4.8-480.10.320+ETD 2025-03-21 15:34:37,123:INFO:fetching database entries.. 2025-03-21 15:34:37,124:INFO:Finding outliers and create log overview for all floors 2025-03-21 15:34:37,125:INFO:Analysis folder /log_data/1.4.8-480.10.320+ETD/filtered_logs/analyzed 2025-03-21 15:34:37,127:ERROR:Could not generate outlier for 1.4.8-480.10.320+ETD Traceback (most recent call last): File "/app/docker_outlier.py", line 63, in <module> generate_outlier_and_visualization(firmware) File "/app/docker_outlier.py", line 28, in generate_outlier_and_visualization outlier.outliergenerator(current_firmware) File "/app/outlier.py", line 840, in outliergenerator out.generate_outlier() File "/app/outlier.py", line 459, in generate_outlier self.allruns_printout(self.list_of_logs) # write csv of all runs File "/app/outlier.py", line 753, in allruns_printout alllogs_overview.to_csv(os.path.join( File "/usr/local/lib/python3.10/dist-packages/pandas/core/generic.py", line 3551, in to_csv return DataFrameRenderer(formatter).to_csv( File "/usr/local/lib/python3.10/dist-packages/pandas/io/formats/format.py", line 1180, in to_csv csv_formatter.save() File "/usr/local/lib/python3.10/dist-packages/pandas/io/formats/csvs.py", line 241, in save with get_handle( File "/usr/local/lib/python3.10/dist-packages/pandas/io/common.py", line 697, in get_handle check_parent_directory(str(handle)) File "/usr/local/lib/python3.10/dist-packages/pandas/io/common.py", line 571, in check_parent_directory raise OSError(rf"Cannot save file into a non-existent directory: '{parent}'") OSError: Cannot save file into a non-existent directory: '/log_data/1.4.8-480.10.320+ETD'
最新发布
03-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值