Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ndarray subclasses with a member called 'dtype' crashes Spyder if dtype.name doesn't exist #20462

Closed
battaglia01 opened this issue Feb 2, 2023 · 1 comment

Comments

@battaglia01
Copy link
Contributor

battaglia01 commented Feb 2, 2023

What steps will reproduce the problem?

A very simplified example:

class my_array(np.ndarray):
    # Define the fields of the structured array
    dtype = 'f8'

x = my_array((2,3))

This will crash.

Traceback

Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'list' object has no attribute 'name'
Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'list' object has no attribute 'name'
Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'list' object has no attribute 'name'
Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'list' object has no attribute 'name'
Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'list' object has no attribute 'name'
Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'list' object has no attribute 'name'
Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'list' object has no attribute 'name'
Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'str' object has no attribute 'name'
Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'str' object has no attribute 'name'
Exception in comms call get_namespace_view:
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/frontendcomm.py", line 270, in _remote_callback
    return super(FrontendComm, self)._remote_callback(
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/comms/commbase.py", line 356, in _remote_callback
    return self._remote_call_handlers[call_name](
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/console/kernel.py", line 193, in get_namespace_view
    view = make_remote_view(ns, settings, EXCLUDED_NAMES)
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 688, in make_remote_view
    'type':  get_human_readable_type(value),
  File "/Users/mike/Library/miniconda3/envs/spyder-env/lib/python3.10/site-packages/spyder_kernels/utils/nsview.py", line 538, in get_human_readable_type
    return u'Array of ' + item.dtype.name
AttributeError: 'str' object has no attribute 'name'

Versions

  • Spyder version: 5.3.2 7235126 (standalone)
  • Python version: 3.9.5 64-bit
  • Qt version: 5.15.2
  • PyQt5 version: 5.15.7
  • Operating System: Darwin 21.6.0

Dependencies

# Mandatory:
atomicwrites >=1.2.0                 :  1.4.1 (OK)
chardet >=2.0.0                      :  5.0.0 (OK)
cloudpickle >=0.5.0                  :  2.1.0 (OK)
cookiecutter >=1.6.0                 :  2.1.1 (OK)
diff_match_patch >=20181111          :  20200713 (OK)
intervaltree >=3.0.2                 :  3.1.0 (OK)
IPython >=7.31.1;<8.0.0              :  7.34.0 (OK)
jedi >=0.17.2;<0.19.0                :  0.18.1 (OK)
jellyfish >=0.7                      :  0.9.0 (OK)
jsonschema >=3.2.0                   :  4.7.2 (OK)
keyring >=17.0.0                     :  23.7.0 (OK)
nbconvert >=4.0                      :  6.5.0 (OK)
numpydoc >=0.6.0                     :  1.4.0 (OK)
parso >=0.7.0;<0.9.0                 :  0.8.3 (OK)
pexpect >=4.4.0                      :  4.8.0 (OK)
pickleshare >=0.4                    :  0.7.5 (OK)
psutil >=5.3                         :  5.9.1 (OK)
pygments >=2.0                       :  2.12.0 (OK)
pylint >=2.5.0;<3.0                  :  2.14.4 (OK)
pyls_spyder >=0.4.0                  :  0.4.0 (OK)
pylsp >=1.5.0;<1.6.0                 :  1.5.0 (OK)
pylsp_black >=1.2.0                  :  1.2.1 (OK)
qdarkstyle >=3.0.2;<3.1.0            :  3.0.3 (OK)
qstylizer >=0.1.10                   :  0.2.1 (OK)
qtawesome >=1.0.2                    :  1.1.1 (OK)
qtconsole >=5.3.0;<5.4.0             :  5.3.1 (OK)
qtpy >=2.1.0                         :  2.1.0 (OK)
rtree >=0.9.7                        :  1.0.0 (OK)
setuptools >=49.6.0                  :  63.2.0 (OK)
sphinx >=0.6.6                       :  5.0.2 (OK)
spyder_kernels >=2.3.2;<2.4.0        :  2.3.2 (OK)
textdistance >=4.2.0                 :  4.3.0 (OK)
three_merge >=0.1.1                  :  0.1.1 (OK)
watchdog >=0.10.3                    :  2.1.9 (OK)
zmq >=22.1.0                         :  23.2.0 (OK)

# Optional:
cython >=0.21                        :  0.29.30 (OK)
matplotlib >=3.0.0                   :  3.5.2 (OK)
numpy >=1.7                          :  1.22.4 (OK)
pandas >=1.1.1                       :  1.4.3 (OK)
scipy >=0.17.0                       :  1.8.1 (OK)
sympy >=0.7.3                        :  1.10.1 (OK)

# Spyder plugins:
spyder_terminal.terminalplugin 1.2.2 :  1.2.2 (OK)
@ccordoba12
Copy link
Member

ccordoba12 commented Feb 2, 2023

Hey @battaglia01, thanks for reporting. This is fixed in our latest version (5.4.2), so please update. I don't know if you're using Conda-forge packages, but that's the only way to get 5.4.2 at the moment.

However, after tried to open the array you created in the Variable Explorer, I got the following error:

Traceback (most recent call last):
  File "/home/carlos/Projects/spyder/spyder/spyder/plugins/variableexplorer/widgets/collectionsdelegate.py", line 182, in createEditor
    if not editor.setup_and_check(value, title=key, readonly=readonly):
  File "/home/carlos/Projects/spyder/spyder/spyder/plugins/variableexplorer/widgets/arrayeditor.py", line 662, in setup_and_check
    is_record_array = data.dtype.names is not None
AttributeError: 'str' object has no attribute 'names'

which is similar to the one you reported. So, we'll fix it in our next version (5.4.3), to be released in March.

@ccordoba12 ccordoba12 changed the title ndarray subclasses with a member called 'dtype' crashes Spyder if my_class.dtype.name doesn't exist ndarray subclasses with a member called 'dtype' crashes Spyder if dtype.name doesn't exist Feb 2, 2023
@ccordoba12 ccordoba12 self-assigned this Feb 2, 2023
@ccordoba12 ccordoba12 added this to the v5.4.3 milestone Feb 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants