Python __init__ de retour de l'échec de la création

Tout d'abord, je sais que le __init__() fonction d'une classe en Python ne peut pas retourner une valeur, si malheureusement cette option n'est pas disponible.

En raison de la structure de mon code, il est logique d'avoir des données affirmations (et demande à l'utilisateur de donner de l'information) à l'intérieur de la __init__ fonction de la classe. Toutefois, cela signifie que la création de l'objet peut échouer, et je voudrais être en mesure de récupérer gracieusement.

Je me demandais quelle est la meilleure façon de continuer avec ce qui est. J'ai réfléchi à la configuration d'un booléen comme un " valide la construction du pavillon, mais je préfère ne pas le faire.

Toutes les autres idées (en plus de la restructuration de sorte assertions peuvent se produire en dehors de l'initialisation et des valeurs en tant qu'arguments)? Je suis fondamentalement à la recherche d'un moyen de renvoyer 0 en cas de succès et renvoie -1 en cas d'échec lors de l'initialisation. (Comme la plupart C des appels système)

Lever une exception.
De retour 0 en cas de succès et -1 en cas d'échec est très anti-Pythonic. Erreur retours sont mauvais, parce qu'ils sont faciles à ignorer, et détaillé au niveau de la poignée. En plus de cela, à l'aide de 0 et -1 comme valeur ajoute de la confusion avec aucun avantage. Ne pas utiliser Python pour écrire du code C.
@Jsbueno le souligne dans sa réponse, les instances de classe sont initialisé dans __init__(), non pas créé, c'est pourquoi il n'est pas return une valeur. Au lieu d'utiliser une variable globale pour détecter les pannes de faire ceci ou lancer une exception, vous pouvez ajouter un membre à votre classe pour indiquer son état, puis vérifiez sa valeur, directement ou appeler une méthode qui retourne sa valeur après __init__() a été appelé à déterminer si quoi que ce soit (et éventuellement ce) lorsqu'il a tort.

OriginalL'auteur Philip Massey | 2013-06-27