日食+ Pydev的:“清理”功能不叫当按下“停止”“?
题
试图运行在蚀该文件
class Try:
def __init__(self):
pass
def __del__(self):
print 1
a=Try()
raw_input('waiting to finish')
和而不让节目结束不打印“1”,即在删除方法不会被调用按下停止按钮。如果我尝试从shell中运行脚本,做CTRL-C \ sys.exit“1”并得到印即德尔被调用。 同样的事情,如果我尝试使用的wait():
class A:
def __enter__(self):
return None
def __exit__(self, type, value, traceback):
print 3
with A():
print 1
raw_input('Waiting')
print 2
如果我按下“停止”提示时,“3”未被打印
这是为什么? 是否有办法解决它?
谢谢,诺姆
解决方案
在Eclipse中按下停止公然杀害解释(虽然它实际上失败相当频繁)。像使用kill
/ taskkill
,该过程是不知道它的灭亡。
Ctrl + C键片断维基百科...
控制-C为中止命令是 通过UNIX普及和采纳 其他系统。在POSIX系统中, 序列引起活动程序到 接收SIGINT信号。如果 程序没有规定如何处理 这种情况下,它被终止。 典型地一个程序,它确实处理 一个SIGINT仍然会自行终止, 或者至少终止任务运行 在它里面。
Ctrl+C
是一个控制信号中断程序,但你可以在段落的中间已经注意到,程序可以指定如何处理信号。在Python键,Ctrl + C 抛出一个KeyboardInterrupt异常其通常捕获并然后Python中完全退出。即使你与Ctrl+C
查杀解释,使其在退出前清理环境中可能会处理它。
我包括以下,因为你问:“有没有办法解决它?”
如果你想停止raw_input(...)
电话时,可使用Ctrl+Z
发送EOF。我环顾四周,而且似乎没有办法送Ctrl+C
/ 0x03
在Eclipse中,很遗憾。
其他提示
Python文档:
__del__(self)
时调用的实例是将被摧毁。这也被称为析构函数。如果一个基类有一个
__del__()
方法,派生类的__del__()
方法,如果有的话,必须显式调用,以确保该实例的基类部分的正确删除。请注意,这是可能的(虽然不推荐!)为__del__()
方法,通过创建一个新的引用来推迟实例的破坏。它可以在这个新的参考被删除,则可以在以后的时间被调用。的它不能保证__del__()
方法被调用,仍存在的解释器退出时的对象。强>
如果你想保证一个方法被称为使用用语句