2015-10-02 3 views
3

Я пытаюсь выполнить следующий простой кодне sys.exitfunc работает в питона

import sys 

print("Starting Test Python Module"); 

def testmethod(): 
    print("From test method") 

sys.exitfunc = testmethod 
print("Terminating Test Python Module"); 

и печатает

C:\Users\athakur\Softwares>python test.py 
Starting Test Python Module 
Terminating Test Python Module 

Я не могу понять, почему он не печатает «От метода испытаний "

Использование atexit работает отлично, хотя

import atexit 

print("Starting Test Python Module"); 

def testmethod(): 
    print("From test method") 

atexit.register(testmethod) 
print("Terminating Test Python Module"); 

Выходы

C:\Users\athakur\Softwares>python test.py 
Starting Test Python Module 
Terminating Test Python Module 
From test method 

ответ

3

sys.exitfuncdoes not exist в Python 3.x.

+0

Да, я использую 'Python 3.4.3'. Таким образом, это объясняет поведение. Но не следует ли жаловаться на интерпретатор python? –

+0

Защита от произвольных атрибутов, добавляемых к объектам * типов *, определенных в C, по-видимому, не распространяется на модули. Должно ли это? Возможно. –

+0

@AniketThakur Нет, вы просто устанавливаете атрибут 'exitfunc' для' sys' модуля, в этом нет ничего плохого. Вы можете сделать 'sys.blahblahblah = ', и он будет работать (пока что-то определено :-), как и для большинства других объектов в python). –

Смежные вопросы