【问题标题】:Error "ValueError: can't format dates this early" on one PC, works on other在一台 PC 上出现错误“ValueError:不能这么早格式化日期”,在另一台 PC 上工作
【发布时间】:2015-05-29 11:35:34
【问题描述】:

我有一个 Python 脚本,可以在我的开发 PC 上完美运行。两者都是具有相同 Python 版本 (2.7.9) 的 Windows 7。但是在目标机器上我得到了一个

ValueError: 不能这么早格式化日期

The error 似乎来自 pywin32 模块。

代码使用了pywin32调用的第三方库:

raw = win32com.client.Dispatch("MyLib.MyClass")

然后失败:

acq_time = raw.GetCreationDate()

现在我不知道为什么这可以在我的 PC 上而不是在目标机器上运行。两者都有 Windows 7 的“企业安装”,例如,相同的区域和日期时间设置。

有什么问题?我该如何解决?

编辑:

见 cmets。原因可能是使用了哪个C++ 运行时。我还在调查。我现在怀疑在安装 pywin32 时存在哪些运行时很重要。为什么?因为我的开发 PC 上的 DependenyWalker 说 pywin 在我的 Lotus Notes 安装中依赖于 MSVCR90.DLL。这告诉我它肯定不是“硬”链接。

2015 年 6 月 30 日更新:

我错了...这个问题现在也发生在我的电脑上。

一些进一步的信息。该脚本读取数据文件并插入读取的 元数据到数据库。只有较旧的文件似乎受到影响 错误,而不是新错误(我现在认为这是错误的假设)。所以我的想法是在我的 Dev PC 上进行初始加载,然后希望新文件不会再出现这个问题。

如果脚本将在 PC 上运行,它读取的文件位于 Windows 共享驱动器(映射网络驱动器)。我无权访问 驱动器,所以我只是将文件复制到我的电脑中。现在做初始 加载我请求访问所述网络驱动器和 BOOM。它也不 我的开发人员的工作。从共享驱动器读取时的机器。

问题并不总是发生在同一个文件上。我现在认为它与特定文件无关。我还在带有 64 位 python 的 64 位 PC 上进行了尝试。在那里花了更长的时间才发生错误。事实上,一个文件已成功读取,但在我的 PC 上失败了。我现在认为这是某种内存问题?我相信它总是在日期行上失败,因为所有其他行只返回 null 或空字符串,这不会导致任何问题,并且完全有可能这样的值可以为 null。但是对于日期来说是有问题的,不应该为空,然后抛出错误。

更新编辑:

在我的电脑上,它总是在同一个文件上失败。单独加载该文件可以正常工作。我现在认为这是在读取 n 个文件后出现的某种计数器/数字溢出问题。它与我每次运行脚本时加载的文件数量有关,而不是与文件本身有关。单独加载失败的文件。

【问题讨论】:

  • 两台机器上的pywin32 版本相同?相同版本的库?
  • 马克哈蒙德的链接评论说_tcsftime tries to be "helpful" by dieing with a too early date in some CRT implementations (eg, vs2008 64bit - and probably others)。你用的是什么 CRT?
  • Windows 区域设置,尤其是日期格式如何?
  • @DougR 导致错误的 PC 没有版本(最新的,2.19)。但是我卸载了它并安装了与我的开发 PC 相同的版本,即 2.18。错误仍然存​​在(在提问之前是否这样做了)。
  • 只是一个猜测,但鉴于您的最新编辑,您是否遇到了 Windows C 运行时 file limit 并且因为您的 COM 对象中的其他内容需要访问新文件而死亡?

标签: python datetime pywin32


【解决方案1】:

事实证明这个问题实际上是微不足道的,并且在某种程度上是由于我缺乏使用 python 的经验和误导性的错误消息。

COM 对象raw = win32com.client.Dispatch("MyLib.MyClass") 用于循环打开专有文件。为了解决这个问题,必须在下一次迭代之前“清理”对象。这是由

del raw 或者 raw = None

这完全解决了问题。它与日期或日期格式完全无关。所以 Peter Brittain 可能是正确的,达到了这个文件限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2012-07-25
    相关资源
    最近更新 更多