试图运行在蚀该文件

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__()方法被调用,仍存在的解释器退出时的对象。

如果你想保证一个方法被称为使用用语句

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top