python - Error "ValueError: no se puede formatear las fechas tan temprano" en una PC, funciona en otra
datetime pywin32 (1)
Resulta que el problema era de hecho trivial y algo debido a mi falta de experiencia con Python y un mensaje de error engañoso.
El objeto COM raw = win32com.client.Dispatch("MyLib.MyClass")
se utiliza para abrir archivos propietarios en un bucle. Para resolver el problema, uno debe "limpiar" el objeto antes de la próxima iteración. Esto se hace ya sea por
del raw
o raw = None
.
Eso resuelve completamente el problema. No tiene absolutamente nada que ver con el formato de fechas o fechas. Así que Peter Brittain probablemente tenía razón de que se alcanzó este límite de archivos.
Tengo un script de Python que funciona perfectamente bien en mi PC de desarrollo. Ambos son Windows 7 con la misma versión de Python (2.7.9). Sin embargo, en la máquina objetivo obtengo un
ValueError: no se pueden formatear las fechas tan temprano
El error parece provenir del módulo pywin32.
El código usa una biblioteca de terceros invocada por pywin32:
raw = win32com.client.Dispatch("MyLib.MyClass")
y luego falla más adelante:
acq_time = raw.GetCreationDate()
Ahora estoy perdido por qué esto está funcionando en mi PC y no en la máquina de destino. Ambos tienen una "instalación corporativa" de Windows 7, por ejemplo, la misma configuración regional y de fecha y hora.
¿Cual es el problema? ¿Cómo podría resolverlo?
EDITAR:
Ver comentarios. La causa es probablemente qué tiempo de ejecución de C++ se usa. Aún estoy investigando. Ahora sospecho que importa qué tiempos de ejecución están presentes en el momento de la instalación de pywin32. ¿Por qué? Porque DependenyWalker en mi PC de desarrollo dice que pywin depende de MSVCR90.DLL
en mi instalación de Lotus Notes. Esto me dice que seguro no está vinculado "duro".
Actualización 30.06.2015:
Estaba completamente equivocado ... El problema ahora también sucede en mi PC.
Alguna información adicional. El script lee los archivos de datos e inserta los metadatos de lectura en una base de datos. Solo los archivos antiguos parecían estar afectados por el error, no los nuevos (ahora creo que esta es una suposición errónea). Entonces la idea era cargar inicialmente en mi PC Dev y luego esperar que el problema nunca vuelva a ocurrir con los archivos nuevos.
En el caso de la PC donde se ejecutará la secuencia de comandos, los archivos que lee están en una unidad compartida de Windows (unidad de red asignada). No tengo acceso a esa unidad, así que simplemente copié los archivos en mi PC. Ahora para hacer la carga inicial solicité acceso a dicha unidad de red y BOOM. Tampoco funciona desde mi Dev. máquina cuando lee desde la unidad compartida.
El problema no siempre ocurre con el mismo archivo. Ahora creo que no tiene nada que ver con un archivo específico. También lo probé en una PC de 64 bits con Python de 64 bits. Allí tomó más tiempo hasta que ocurrió el error. De hecho, se leyó con éxito un archivo que falló en mi PC. ¿Ahora creo que es algún tipo de problema de memoria? Creo que siempre falla en la línea de fecha porque todas las demás líneas simplemente devuelven nulo o una cadena vacía que no causa ningún problema y es totalmente posible, tal valor puede ser nulo. Pero para la fecha es un problema y no debe ser nulo y luego se produce el error.
EDITAR la actualización:
En mi PC siempre falla en el mismo archivo. Cargar ese archivo solo funciona perfectamente bien. Ahora creo que es un tipo de desbordamiento de contador / número que después de leer n archivos, ocurre el problema. Tiene que ver con la cantidad de archivos que cargo por ejecución del script y no con el archivo en sí. Archivos que fallan al cargarlos individualmente.