Значение параметра Python по умолчанию с использованием даты и времени

У меня есть простой скрипт на Python, который использует обработчик сигналов для Ctl-C. Если программа завершается нормально, время окончания передается в функцию «print_results». Я хотел, чтобы функция print_results имела необязательный параметр, который, если он не передан, просто получает текущее время «сейчас». Но когда я вызываю его из обработчика сигнала, он не получает правильное время.

Вот моя упрощенная, но воспроизводимая программа:

import sys
import signal
import urllib2
import urllib
import datetime
import time
import getopt,sys

def signal_handler(signal, frame):
    print_results()
    sys.exit(0)

def print_results(ended=datetime.datetime.now()):
    print "\nEnded at ",ended
    print "Total time: ",(ended - startTime)
    print "Finished ",numIterations," iterations, received ",totalRecords," records"

    numIterations = 0
    maxIterations = 8
    delaySecs = 3
    totalRecords = 0

    # set up signal handler
    signal.signal(signal.SIGINT, signal_handler)

    startTime = datetime.datetime.now()

    print "Starting at ",time.asctime(time.localtime())

    while (numIterations < maxIterations):

        iterStartTime = datetime.datetime.now()

        numIterations += 1

        print "Iteration: ",numIterations

        # sleep if necessary

        if delaySecs > 0:
            time.sleep(delaySecs)

        iterEndTime = datetime.datetime.now()

        print "Iteration time: ",(iterEndTime - iterStartTime)

    endTime = datetime.datetime.now()

    print "Ended at ",time.asctime(time.localtime())
    print "Total test time: ",(endTime - startTime)

    print_results(endTime)

Вот что происходит, когда я набираю Ctl-C

$ python test.py                                                           
Starting at  Fri Jun 15 08:28:15 2012
Iteration:  1
Iteration time:  0:00:03.003101
Iteration:  2
Iteration time:  0:00:03.003105
Iteration:  3
^C
Ended at  2012-06-15 08:28:15.766496
Total time:  -1 day, 23:59:59.999964
Finished  3  iterations, received  0  records

Похоже, что когда print_results вызывается без аргументов, value неправильно интерпретируется как объект datetime. Но так как Питон не имеет способа приведения (насколько я могу судить), я не могу сказать, что не так.

Заранее спасибо,

Митч

8
задан Joel Cornett 15 June 2012 в 12:41
поделиться