Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Error accessing attribute of Python object from Julia.

Ouverte
#598 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
backend

Piste de recherche

Reproduisez l’accès à l’attribut de qiskit_aer.AerSimulator avec les versions fournies de Julia et CondaPkg. Commencez à src/JlWrap/any.jl:249 et avec la recherche d’attributs PythonCall affichée dans le traceback, puis comparez l’accès à num_qubits avec le chemin de complétion par tabulation. C’est terminé lorsque test.num_qubits renvoie la valeur numérique de l’attribut Python sans l’erreur de champ Array.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug

Affects: PythonCall

Describe the bug
Im trying to use qiskit_aer, which is a python package, from Julia.
First I add the dependencies, which results in my CondaPkg.toml to look like this:

[deps]
qiskit-aer = "0.16.1.*"
qiskit = "1.4.2.*"

Then I load it:

const qiskit_aer = PythonCall.pynew()
PythonCall.pycopy!(qiskit_aer, PythonCall.pyimport("qiskit_aer"))

Now I can create an simulator object:

test = qiskit_aer.AerSimulator(
               method="statevector",
               device="CPU",
               enable_truncation=false,
               target=[0]
           )

And I can see all its attributes when pressing tab for auto compleation:

julia> test.
_AVAILABLE_DEVICES         _AVAILABLE_METHODS         _BASIS_GATES               _CUSTOM_INSTR              _DEFAULT_CONFIGURATION     _SIMULATION_DEVICES        _SIMULATION_METHODS
__abstractmethods__        __class__                  __delattr__                __dict__                   __dir__                    __doc__                    __eq__
__format__                 __ge__                     __getattribute__           __getstate__               __gt__                     __hash__                   __init__
__init_subclass__          __le__                     __lt__                     __module__                 __ne__                     __new__                    __reduce__
__reduce_ex__              __repr__                   __setattr__                __sizeof__                 __slots__                  __str__                    __subclasshook__
__weakref__                _abc_impl                  _assemble_noise_model      _basis_gates               _cached_basis_gates        _check_basis_gates         _compile
_configuration             _controller                _convert_binds             _convert_circuit_binds     _coupling_map              _default_options           _execute_circuits
_execute_circuits_job      _format_results            _from_backend              _get_executor              _instruction_schedule_map  _mapping                   _options
_options_configuration     _options_properties        _properties                _provider                  _run_circuits              _set_configuration_option  _set_method_config
_set_properties_option     _target                    acquire_channel            available_devices          available_methods          backend_version            clear_options
configuration              control_channel            coupling_map               description                drive_channel              dt                         dtm
from_backend               instruction_durations      instruction_schedule_map   instructions               max_circuits               meas_map                   measure_channel
name                       num_qubits                 online_date                operation_names            operations                 options                    properties
provider                   qubit_properties           run                        set_max_qubits             set_option                 set_options                status
target

So far it works great. Now the bug occurs when I actually want to get one of these attributes:

julia> test.num_qubits
ERROR: Python: AttributeError: Julia: type Array has no field num_qubits
Python stacktrace:
 [1] __getattr__
   @ ~/.julia/packages/PythonCall/WMWY0/src/JlWrap/any.jl:249
 [2] num_qubits
   @ qiskit.providers.backend /files/home/part8/user/Bookworm/Documents/project/.CondaPkg/env/lib/python3.11/site-packages/qiskit/providers/backend.py:406
Stacktrace:
 [1] pythrow()
   @ PythonCall.Core ~/.julia/packages/PythonCall/WMWY0/src/Core/err.jl:92
 [2] errcheck
   @ ~/.julia/packages/PythonCall/WMWY0/src/Core/err.jl:10 [inlined]
 [3] pygetattr(x::Py, k::String)
   @ PythonCall.Core ~/.julia/packages/PythonCall/WMWY0/src/Core/builtins.jl:62
 [4] getproperty(x::Py, k::Symbol)
   @ PythonCall.Core ~/.julia/packages/PythonCall/WMWY0/src/Core/Py.jl:273
 [5] top-level scope
   @ REPL[19]:1

I would expect this to just return a number. The attribute existes, see docs.

Your system

julia> versioninfo()
Julia Version 1.11.4
Commit 8561cc3d68d (2025-03-10 11:36 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 24 × 13th Gen Intel(R) Core(TM) i7-13700
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, alderlake)
Threads: 1 default, 0 interactive, 1 GC (on 24 virtual cores)
Environment:
  JULIA_EDITOR = code
julia> CondaPkg.status()
CondaPkg Status /files/home/part8/user/Bookworm/Documents/project/CondaPkg.toml
Environment
  /files/home/part8/user/Bookworm/Documents/project/.CondaPkg/env
Packages
  qiskit v1.4.2 (1.4.2.*)
  qiskit-aer v0.16.1 (0.16.1.*)
Langage dominant
Julia
Étoiles
1.1k
Forks
89
Merge moyen
2 j 15 h
PR mergées (30 j)
7

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de JuliaPy/PythonCall.jl

Toutes les issues de JuliaPy/PythonCall.jl

Issues similaires

Plus d'issues Julia

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.