web-dev-qa-db-fra.com

TypeError: les exceptions doivent être des classes à l'ancienne ou dérivées de BaseException, pas str

Voici mon code:

test = 'abc'
if True:
    raise test + 'def'

Et quand je lance ça, ça me donne le TypeError

TypeError: exceptions must be old-style classes or derived from BaseException, not str

Quel type de type devrait donc être le test?

43
2342G456DI8

Le seul argument à soulever indique l'exception à soulever. Il doit s'agir d'une instance d'exception ou d'une classe d'exception (une classe qui dérive d'Exception).

Essaye ça:

test = 'abc'
if True:
    raise Exception(test + 'def')
56
user1393258

Vous ne pouvez pas raise a str. Seuls Exceptions peuvent être raised.

Donc, vous feriez mieux de construire une exception avec cette chaîne et de l'augmenter. Par exemple, vous pourriez faire:

test = 'abc'
if True:
    raise Exception(test + 'def')

OR

test = 'abc'
if True:
    raise ValueError(test + 'def')

J'espère que ça t'as aidé

35
inspectorG4dget

Ce devrait être une exception.

Vous voulez faire quelque chose comme:

raise RuntimeError(test + 'def')

Dans Python 2.5 et ci-dessous, votre code fonctionnerait, car il était alors autorisé de lever des chaînes comme exceptions. Ce fut une très mauvaise décision, et donc supprimée en 2.6.

16
Abe Karplus