Subclassing threading Lock/RLock: better Exception messages

Ouverte
#94,077 2 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

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

Piste de recherche

Commencez par la reproduction minimale en Python présente dans l’issue et examinez l’entrée de la documentation de threading consacrée à Lock et RLock. Déterminez comment l’héritage actuellement non pris en charge est exposé, puis rendez le comportement plus clair au moyen d’un message d’erreur plus convivial et d’une documentation indiquant la limitation de l’héritage. Réexécutez les deux définitions de sous-classe pour vérifier les messages obtenus.

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

Description

stdlib type-bug

Bug report

Please see the below minimal repro:

from threading import Lock, RLock

class SubclassLock(Lock):
    pass

class SubclassRLock(RLock):
    pass

The subclass of Lock emits:

Traceback (most recent call last):
  File "/path/to/file.py", line 3, in <module>
    class SubclassLock(Lock):
TypeError: cannot create 'builtin_function_or_method' instances

The subclass of RLock emits:

Traceback (most recent call last):
  File "/path/to/file.py", line 6, in <module>
    class SubclassRLock(RLock):
TypeError: function() argument 'code' must be code, not str

Both of these messages are relatively cryptic. I think if Python doesn't support subclassing Lock/RLock, it should be documented in threading, and this error message should be more friendly/clear.

Your environment

  • CPython versions tested on: 3.10.3
  • Operating system and architecture: macOS Big Sur 11.5.1
Langage dominant
Python
Étoiles
77.2k
Forks
36k
Merge moyen
1 j 9 h
PR mergées (30 j)
558

Guide de contribution

Ouvrir le guide de contribution

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 python/cpython

Toutes les issues de python/cpython

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

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