Почему метод python не возвращается? - PullRequest
0 голосов
/ 10 декабря 2010

У меня есть метод destroy (), который вызывается до того, как мой поток прерывается.

def destroy(self):
    self.logger.debug("Instance is being destroyed")
    //do stuff
    self.logger.debug("Instance has been destroyed")

Это код, из которого он вызывается:

if (__name__ == '__main__'):
try:        
    instance = device_instance()             
        while True:
            //do stuff
            if input_string == 'destroy':
                instance.destroy()
                logger.debug("Back in main after destroying")
                break
            else:
                //do stuff
            time.sleep(.100)
except Exception, ex:
    logger.debug("Exception occurred" + str(ex))
except:
    logger.debug("Unhandled exception occurred")

Теперь, когдаЯ запускаю его, проблема в том, что я вижу в журнале операторы «Экземпляр уничтожается» и «Экземпляр уничтожен», и я не вижу «Вернуться в главное после уничтожения».Это означает, что мой destroy () никогда не возвращается.Я попытался добавить явный оператор возврата, все та же проблема.Если я добавлю sys.exit (0) к destroy () в конце, это вызовет исключение, которое в конечном итоге перехватывается в main.В чем может быть проблема?

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

Вы смотрите на тот же регистратор?

1 голос
/ 10 декабря 2010

Я думаю, нам понадобится немного больше информации, чем эта - возможно, о контексте «сделай что-нибудь» и input_string

Я положил это в кусок кода:

import logging                                                                                          
import time                                                                                             

logger = logging.getLogger('')                                                                          

class device_instance(object):                                                                          

    def destroy(self):                                                                                  
        self.logger.warning('Instance is being destroyed')                                              
        # do stuff                                                                                      
        self.logger.warning('Instance is destroyed')                                                    

input_strings = ['one', 'two', 'destroy']                                                               

if (__name__ == '__main__'):                                                                            
    logging.basicConfig()                                                                               
    try:                                                                                                
        instance = device_instance()                                                                    
        instance.logger = logger                                                                        

        gen = input_strings.__iter__()                                                                  

        while True:                                                                                     
            #do stuff                                                                                   
            try:                                                                                        
                input_string = gen.next()                                                               
            except StopIteration:                                                                       
                input_string = 'destroy'                                                                

            if input_string == 'destroy':                                                               
                instance.destroy()                                                                      
                logger.warning("Back in main after destroying")                                         
                break                                                                                   
            else:                                                                                       
                time.sleep(.100)                                                                        
    except:                                                                                             
        logger.exception("Unhandled exception occurred")

Выводит то, что вы ожидаете:

WARNING:root:Instance is being destroyed                                                                    
WARNING:root:Instance is destroyed                                                                          
WARNING:root:Back in main after destroying

Итак, я думаю, что-то еще.

1 голос
/ 10 декабря 2010

Ваш уровень журнала выше для отладки?Попробуйте с print

Также попробуйте добавить журнал перед звонком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...