繁体   English   中英

为什么python方法不返回?

[英]Why a python method not returning?

我有一个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()永不返回。 我尝试添加显式的return语句,仍然是同样的问题。 如果我在末尾添加sys.exit(0)到destroy(),它会引发异常,该异常最终会被main捕获。 可能是什么问题?

您是否在查看同一记录器?

您的日志级别是否高于要调试的级别? 尝试print

另外,尝试在通话前添加日志。

我认为我们需要比这更多的信息-可能有关“做某事”和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

我想还有其他事情在起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM