2017-06-06 1 views
-1
@defer.inlineCallbacks 
def getZone(zone,ttl,type_,name,data): 
try: 
    zone = yield nsone.createZone(zone,nx_ttl=ttl) 
except Exception: 
    zone = yield nsone.loadZone(zone) 

zone = getZone(zone,ttl,type_,name,data) 
reactor.run() 

J'essaie de créer la zone si elle n'existe pas, ou de charger la zone dans le cas contraire. Comme c'est Async tordu, je reçois des erreurs comme -Threading ou différé dans Twisted Interface

[Failure instance: Traceback (failure with no frames): <class 
'twisted.internet.defer.FirstError'>: FirstError[#1, [Failure instance: 
Traceback:  <class 'nsone.rest.errors.ResourceException'>: server error: zone not found 

Si je renverse l'ordre, je reçois -

Traceback:  <class 'nsone.rest.errors.ResourceException'>: server error: zone already exists 

J'utilise un try-catch car il n'y a pas de fonction pour vérifier si la zone existe dans l'API.

La question est, comment puis-je faire des fonctions correctes à appeler en fonction de la disponibilité de la zone? Je pense ajouter une sorte de thread dans ce bloc try-catch. Je n'ai pas l'expérience du multi-threading, donc je ne savais pas trop comment appeler ce problème. Merci.

+0

Veuillez expliquer ce que sont les "zones" et indiquez où vous pensez qu'un thread ou différé devrait aller dans votre exemple. Syntaxiquement, votre exemple de code est correct, donc peut-être qu'une autre fonction, peut-être 'loadZone()', déclenche une exception. –

+0

http://sscce.org/ –

+0

@ notorious.no Bonjour. Zone est un objet dans la base de données que j'appelle. Je pense que le différé devrait aller dans ce bloc try-catch. loadZone et createZone fonctionnent dans un autre contexte, donc je ne pense pas que ce soit faux. Merci! – Gatsby

Répondre

0

L'instruction try-catch n'était pas nécessaire. Attendez simplement une réponse en utilisant le rendement.