How to reassign dict functionality back to the 'dict'?
Question:
I accidentally assigned a dictionary to the keyword dict
, now its leading to dict object not callable
. So how can I reassign back the functionality without restarting the kernel?
Answers:
It’s a bad idea to override the key words in Python.
If you want you dict back, use this:
from builtins import dict
d = dict()
But this codes will override your defined dict again. So you can use the following codes to control the scope:
dict = lambda: 'damn it, I override the buildins'
d = dict()
print(d)
from contextlib import contextmanager
@contextmanager
def get_dict_back():
import builtins
yield builtins.dict
with get_dict_back() as build_dict:
d = build_dict({'a': 1})
print(d)
print(dict())
The buildin dict is only avaiable in the with-statement.
Output:
damn it, I override the buildins
{'a': 1}
damn it, I override the buildins
dict
is a builtin. Builtins are grouped together in the builtin
package. So you can use:
import builtins
dict = builtins.dict
A piece of advice is to never override builtins: do not assign to variables named list
, dict
, set
, int
, float
, etc.
That being said, you can remove dict
from the scope as well. In that case Python will fallback on the builtins. So you delete the variable:
temp_dict = dict
del dict # remove the `dict`, now it will delegate to the `dict` builtin
For example:
>>> dict = {}
>>> dict
{}
>>> del dict
>>> dict
<class 'dict'>
So you delete it out of the scope, and then Python will again bind it to the “outer” scope.
I accidentally assigned a dictionary to the keyword dict
, now its leading to dict object not callable
. So how can I reassign back the functionality without restarting the kernel?
It’s a bad idea to override the key words in Python.
If you want you dict back, use this:
from builtins import dict
d = dict()
But this codes will override your defined dict again. So you can use the following codes to control the scope:
dict = lambda: 'damn it, I override the buildins'
d = dict()
print(d)
from contextlib import contextmanager
@contextmanager
def get_dict_back():
import builtins
yield builtins.dict
with get_dict_back() as build_dict:
d = build_dict({'a': 1})
print(d)
print(dict())
The buildin dict is only avaiable in the with-statement.
Output:
damn it, I override the buildins
{'a': 1}
damn it, I override the buildins
dict
is a builtin. Builtins are grouped together in the builtin
package. So you can use:
import builtins
dict = builtins.dict
A piece of advice is to never override builtins: do not assign to variables named list
, dict
, set
, int
, float
, etc.
That being said, you can remove dict
from the scope as well. In that case Python will fallback on the builtins. So you delete the variable:
temp_dict = dict
del dict # remove the `dict`, now it will delegate to the `dict` builtin
For example:
>>> dict = {}
>>> dict
{}
>>> del dict
>>> dict
<class 'dict'>
So you delete it out of the scope, and then Python will again bind it to the “outer” scope.