ipywidgets icon indicating copy to clipboard operation
ipywidgets copied to clipboard

button on_click yields UnboundLocalError if variable from parent scope is updated in the function

Open shadiakiki1986 opened this issue 4 years ago • 1 comments
trafficstars

Description

button on_click yields UnboundLocalError if variable from parent scope is updated in the function

Update: dict variables do not produce the same error

Reproduce

import ipywidgets as widgets

x = 0
y = {"x": 0}
b = widgets.Button(description="Do it")

def doit(obj):
    print(x, y)
    # x += 1 # uncommenting makes the above print fail
    y["x"] += 1 # this is ok

b.on_click(doit)
display(b)

Expected behavior

No error

Context

  • ipywidgets version 7.6.5
  • Operating System and version: ubuntu 20.04
  • Browser and version: firefox

jupyter troubleshoot (on colab)

$PATH:
	/usr/local/nvidia/bin
	/usr/local/cuda/bin
	/usr/local/sbin
	/usr/local/bin
	/usr/sbin
	/usr/bin
	/sbin
	/bin
	/tools/node/bin
	/tools/google-cloud-sdk/bin
	/opt/bin

sys.path:
	/usr/local/bin
	/env/python
	/usr/lib/python2.7
	/usr/lib/python2.7/plat-x86_64-linux-gnu
	/usr/lib/python2.7/lib-tk
	/usr/lib/python2.7/lib-old
	/usr/lib/python2.7/lib-dynload
	/usr/local/lib/python2.7/dist-packages
	/usr/lib/python2.7/dist-packages

sys.executable:
	/usr/bin/python2

sys.version:
	2.7.17 (default, Feb 27 2021, 15:10:58) 
	[GCC 7.5.0]

platform.platform():
	Linux-5.4.104+-x86_64-with-Ubuntu-18.04-bionic

which -a jupyter:
	/usr/local/bin/jupyter

pip list:
	Package                            Version              
	---------------------------------- ---------------------
	absl-py                            0.7.1                
	aenum                              2.2.0                
	alabaster                          0.7.12               
	albumentations                     0.1.12               
	altair                             3.3.0                
	astor                              0.8.1                
	astropy                            2.0.14               
	atari-py                           0.1.7                
	atomicwrites                       1.3.0                
	attrs                              19.1.0               
	audioread                          2.1.8                
	autograd                           1.2                  
	Babel                              2.7.0                
	backports-abc                      0.5                  
	backports.functools-lru-cache      1.5                  
	backports.shutil-get-terminal-size 1.0.0                
	backports.tempfile                 1.0                  
	backports.weakref                  1.0.post1            
	bcolz                              1.2.1                
	beautifulsoup4                     4.6.3                
	bleach                             3.1.0                
	blis                               0.2.4                
	bokeh                              1.0.4                
	boto                               2.49.0               
	boto3                              1.9.189              
	botocore                           1.12.189             
	branca                             0.3.1                
	bs4                                0.0.1                
	bz2file                            0.98                 
	cachetools                         3.1.1                
	certifi                            2019.6.16            
	cffi                               1.12.3               
	chainer                            5.4.0                
	chardet                            3.0.4                
	Click                              7.0                  
	click-plugins                      1.1.1                
	cligj                              0.5.0                
	cloudpickle                        1.3.0                
	cmake                              3.12.0               
	colorlover                         0.3.0                
	community                          1.0.0b1              
	configparser                       3.7.4                
	contextlib2                        0.5.5                
	convertdate                        2.1.3                
	crcmod                             1.7                  
	cufflinks                          0.14.6               
	cvxopt                             1.2.3                
	cvxpy                              1.0.15               
	cycler                             0.10.0               
	cymem                              2.0.2                
	Cython                             0.29.12              
	daft                               0.0.4                
	dask                               1.1.5                
	decorator                          4.4.0                
	defusedxml                         0.6.0                
	descartes                          1.1.0                
	dill                               0.3.0                
	distributed                        1.25.3               
	Django                             1.11.22              
	dlib                               19.18.0              
	docutils                           0.14                 
	dopamine-rl                        1.0.5                
	easydict                           1.9                  
	ecos                               2.0.7.post1          
	editdistance                       0.5.3                
	en-core-web-sm                     2.1.0                
	entrypoints                        0.3                  
	enum34                             1.1.6                
	ephem                              3.7.6.0              
	et-xmlfile                         1.0.1                
	fa2                                0.3.5                
	fancyimpute                        0.4.3                
	fastai                             0.7.0                
	fastcache                          1.1.0                
	fastdtw                            0.3.2                
	fastrlock                          0.4                  
	fbprophet                          0.5                  
	feather-format                     0.4.0                
	featuretools                       0.4.1                
	filelock                           3.0.12               
	Fiona                              1.8.6                
	fix-yahoo-finance                  0.0.22               
	Flask                              1.1.1                
	folium                             0.8.3                
	funcsigs                           1.0.2                
	functools32                        3.2.3.post2          
	future                             0.16.0               
	futures                            3.2.0                
	gast                               0.2.2                
	GDAL                               2.2.2                
	gdown                              3.6.4                
	gensim                             3.6.0                
	geographiclib                      1.49                 
	geopandas                          0.5.1                
	geopy                              1.17.0               
	gevent                             1.4.0                
	gin-config                         0.2.0                
	glob2                              0.7                  
	google                             2.0.2                
	google-api-core                    1.13.0               
	google-api-python-client           1.7.9                
	google-auth                        1.35.0               
	google-auth-httplib2               0.0.3                
	google-auth-oauthlib               0.4.0                
	google-cloud-bigquery              1.14.0               
	google-cloud-core                  1.0.2                
	google-cloud-datastore             1.8.0                
	google-cloud-language              1.2.0                
	google-cloud-storage               1.16.1               
	google-cloud-translate             1.5.0                
	google-colab                       1.0.0                
	google-pasta                       0.1.7                
	google-resumable-media             0.3.2                
	googleapis-common-protos           1.6.0                
	googledrivedownloader              0.4                  
	graphviz                           0.10.1               
	greenlet                           0.4.15               
	grpcio                             1.15.0               
	gspread                            3.0.1                
	gspread-dataframe                  3.0.2                
	gunicorn                           19.9.0               
	gym                                0.10.11              
	h5py                               2.8.0                
	HeapDict                           1.0.0                
	holidays                           0.9.10               
	html5lib                           1.0.1                
	httpimport                         0.5.16               
	httplib2                           0.11.3               
	humanize                           0.5.1                
	hyperopt                           0.1.2                
	ideep4py                           2.0.0.post3          
	idna                               2.8                  
	image                              1.5.27               
	imageio                            2.4.1                
	imagesize                          1.1.0                
	imbalanced-learn                   0.4.3                
	imblearn                           0.0                  
	imgaug                             0.2.9                
	importlib-metadata                 1.3.0                
	imutils                            0.5.2                
	inflect                            2.1.0                
	intel-openmp                       2019.0               
	intervaltree                       2.1.0                
	ipaddress                          1.0.22               
	ipykernel                          4.10.1               
	ipython                            5.5.0                
	ipython-genutils                   0.2.0                
	ipython-sql                        0.3.9                
	ipywidgets                         7.5.0                
	isoweek                            1.3.3                
	itsdangerous                       1.1.0                
	jdcal                              1.4.1                
	jedi                               0.14.1               
	jieba                              0.39                 
	Jinja2                             2.10.1               
	jmespath                           0.9.4                
	joblib                             0.12.5               
	jpeg4py                            0.1.4                
	jsonschema                         2.6.0                
	jupyter                            1.0.0                
	jupyter-client                     5.3.1                
	jupyter-console                    5.2.0                
	jupyter-core                       4.5.0                
	kaggle                             1.5.4                
	kapre                              0.1.3.1              
	Keras                              2.3.1                
	Keras-Applications                 1.0.8                
	Keras-Preprocessing                1.1.0                
	keras-vis                          0.4.1                
	kiwisolver                         1.1.0                
	knnimpute                          0.1.0                
	librosa                            0.6.3                
	lightgbm                           2.2.3                
	llvmlite                           0.29.0               
	lmdb                               0.96                 
	lucid                              0.3.8                
	lunardate                          0.2.0                
	lxml                               4.2.6                
	Markdown                           3.1.1                
	MarkupSafe                         1.1.1                
	matplotlib                         2.2.4                
	matplotlib-venn                    0.11.5               
	mesh-tensorflow                    0.1.19               
	mido                               1.2.6                
	mir-eval                           0.5                  
	missingno                          0.4.2                
	mistune                            0.8.4                
	mizani                             0.4.6                
	mkl                                2019.0               
	mlxtend                            0.14.0               
	mock                               2.0.0                
	more-itertools                     5.0.0                
	moviepy                            0.2.3.5              
	mpmath                             1.1.0                
	msgpack                            0.5.6                
	multiprocess                       0.70.8               
	multitasking                       0.0.9                
	munch                              2.3.2                
	murmurhash                         1.0.2                
	music21                            4.1.0                
	natsort                            5.5.0                
	nbconvert                          5.5.0                
	nbformat                           4.4.0                
	networkx                           2.2                  
	nibabel                            2.3.3                
	nltk                               3.2.5                
	nose                               1.3.7                
	notebook                           5.2.2                
	np-utils                           0.5.10.0             
	numba                              0.40.1               
	numexpr                            2.6.9                
	numpy                              1.16.4               
	oauth2client                       4.1.3                
	oauthlib                           3.0.2                
	okgrade                            0.4.3                
	olefile                            0.46                 
	opencv-contrib-python              3.4.3.18             
	opencv-python                      3.4.5.20             
	openpyxl                           2.5.9                
	opt-einsum                         2.3.2                
	osqp                               0.5.0                
	packaging                          19.0                 
	palettable                         3.2.0                
	pandas                             0.24.2               
	pandas-datareader                  0.7.0                
	pandas-gbq                         0.4.1                
	pandas-profiling                   1.4.1                
	pandas-summary                     0.0.6                
	pandocfilters                      1.4.2                
	parso                              0.5.1                
	pathlib                            1.0.1                
	pathlib2                           2.3.4                
	patsy                              0.5.1                
	pbr                                5.4.0                
	pexpect                            4.7.0                
	pickleshare                        0.7.5                
	Pillow                             4.3.0                
	pip                                19.3.1               
	pip-tools                          3.9.0                
	plac                               0.9.6                
	plotly                             3.6.1                
	plotnine                           0.4.0                
	pluggy                             0.7.1                
	portpicker                         1.3.9                
	prefetch-generator                 1.0.1                
	preshed                            2.0.1                
	pretty-midi                        0.2.8                
	prettytable                        0.7.2                
	progressbar2                       3.38.0               
	prometheus-client                  0.7.1                
	promise                            2.2.1                
	prompt-toolkit                     1.0.16               
	protobuf                           3.8.0                
	psutil                             5.4.8                
	psycopg2                           2.7.6.1              
	ptyprocess                         0.6.0                
	py                                 1.8.0                
	pyarrow                            0.14.0               
	pyasn1                             0.4.5                
	pyasn1-modules                     0.2.5                
	pycocotools                        2.0.0                
	pycparser                          2.19                 
	pydot                              1.3.0                
	pydot-ng                           2.0.0                
	pydotplus                          2.0.2                
	pyemd                              0.5.1                
	pyglet                             1.4.1                
	Pygments                           2.1.3                
	pymc3                              3.6                  
	pymongo                            3.8.0                
	pymystem3                          0.2.0                
	PyOpenGL                           3.1.0                
	pyparsing                          2.4.0                
	pyproj                             2.2.1                
	pyrsistent                         0.15.4               
	pysndfile                          1.3.3                
	PySocks                            1.7.0                
	pystan                             2.19.0.0             
	pytest                             3.6.4                
	python-chess                       0.23.11              
	python-dateutil                    2.5.3                
	python-louvain                     0.13                 
	python-rtmidi                      1.3.0                
	python-slugify                     3.0.2                
	python-utils                       2.3.0                
	pytz                               2018.9               
	PyWavelets                         1.0.3                
	PyYAML                             3.13                 
	pyzmq                              19.0.0               
	qtconsole                          4.5.2                
	QtPy                               1.11.2               
	requests                           2.23.0               
	requests-oauthlib                  1.2.0                
	resampy                            0.2.1                
	retrying                           1.3.3                
	rpy2                               2.8.6                
	rsa                                4.0                  
	s3fs                               0.2.2                
	s3transfer                         0.2.1                
	scandir                            1.10.0               
	scikit-image                       0.14.3               
	scikit-learn                       0.20.3               
	scipy                              1.2.2                
	scs                                2.1.1.post2          
	seaborn                            0.9.0                
	semantic-version                   2.6.0                
	Send2Trash                         1.5.0                
	setuptools                         44.1.1               
	setuptools-git                     1.2                  
	Shapely                            1.6.4.post2          
	simplegeneric                      0.8.1                
	singledispatch                     3.4.0.3              
	six                                1.15.0               
	sklearn                            0.0                  
	sklearn-pandas                     1.8.0                
	smart-open                         1.8.4                
	snowballstemmer                    1.9.0                
	sortedcontainers                   2.1.0                
	spacy                              2.1.6                
	Sphinx                             1.8.5                
	sphinxcontrib-websupport           1.1.2                
	SQLAlchemy                         1.3.5                
	sqlparse                           0.3.0                
	srsly                              0.0.7                
	statsmodels                        0.10.0               
	subprocess32                       3.5.4                
	sympy                              1.1.1                
	tables                             3.4.4                
	tabulate                           0.8.3                
	tblib                              1.4.0                
	tensor2tensor                      1.11.0               
	tensorboard                        2.1.0                
	tensorboardcolab                   0.0.22               
	tensorflow                         2.1.0                
	tensorflow-estimator               1.15.0               
	tensorflow-hub                     0.5.0                
	tensorflow-metadata                0.14.0               
	tensorflow-probability             0.9.0                
	termcolor                          1.1.0                
	terminado                          0.8.2                
	testpath                           0.4.2                
	text-unidecode                     1.2                  
	textblob                           0.15.3               
	tfds-nightly                       1.0.2.dev201907170105
	Theano                             1.0.4                
	thinc                              7.0.8                
	toolz                              0.10.0               
	torch                              1.4.0                
	torchsummary                       1.5.1                
	torchtext                          0.3.1                
	torchvision                        0.5.0                
	tornado                            4.5.3                
	tqdm                               4.28.1               
	traitlets                          4.3.2                
	tweepy                             3.6.0                
	typing                             3.7.4                
	tzlocal                            1.5.1                
	umap-learn                         0.3.9                
	uritemplate                        3.0.0                
	urllib3                            1.24.3               
	vega-datasets                      0.7.0                
	wasabi                             0.2.2                
	wcwidth                            0.1.7                
	webencodings                       0.5.1                
	Werkzeug                           0.15.5               
	wheel                              0.37.0               
	widgetsnbextension                 3.5.0                
	wordcloud                          1.5.0                
	wrapt                              1.11.2               
	xarray                             0.11.3               
	xgboost                            0.82                 
	xlrd                               1.1.0                
	xlwt                               1.3.0                
	yellowbrick                        0.9.1                
	zict                               1.0.0                
	zipp                               1.2.0

shadiakiki1986 avatar Oct 07 '21 19:10 shadiakiki1986

This is not an issue of ipywidgets, but a general issue with the Python language's scope handling. A fix would be to add nonlocal x to your handler. Details are described in this stackoverflow post.

dokempf avatar Feb 03 '22 21:02 dokempf