[英]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.