【问题标题】:Python: ValueError only happening on AppEngine but works fine localPython:ValueError 仅发生在 AppEngine 上,但在本地运行良好
【发布时间】:2014-01-29 16:06:09
【问题描述】:

这很奇怪。运行代码,它在本地服务器上运行良好,但将其上传到应用引擎时,它根本不起作用并出现错误:

    if int(totaltime[0:2]) == 23 and int(totaltime[3:5]) >= 45:
ValueError: invalid literal for int() with base 10: ', '

这是触发它的代码:

        if int(totaltime[0:2]) == 23 and int(totaltime[3:5]) >= 45:
            ta = "yes"
        else:
            ta = "no"

totaltime 是 23:27:35,所以 int(totaltime[0:2]) 得到 23,(totaltime[3:5]) 得到 27。 我不明白为什么这不能在网上工作,但在本地工作得很好。

【问题讨论】:

  • 那么你如何构造总时间?
  • 这是一个日期时间。我将日期时间复制到一个字符串,将日期分隔为一个字符串,将时间分隔为一个字符串(timetotal)

标签: python google-app-engine int


【解决方案1】:

异常表示您的输入数据包含逗号,因此您对totaltime 的期望是23:27:35 显然违反了。

尝试在 Appengine 上输出 repr(totaltime[0:2])repr(totaltime[3:5])

此外,您可以将 if 语句分成两行,如下所示:

if (int(totaltime[0:2]) == 23 and 
    int(totaltime[3:5]) >= 45):

这将让您查看对int() 的哪些调用触发了ValueError,从而使调试更容易一些。

还要注意日期字符串(来自 timedatetime 的日期字符串都遵循区域设置,这可能解释了您的开发系统和 AppEngine 之间的差异。

【讨论】:

  • if (int(totaltime[0:2]) == 23 and ValueError: invalid literal for int() with base 10: ', ' datetime 来自与本地时间无关的列表。
  • repr() 语句给你什么?正如我所说,我怀疑 GAE 上的字符串与您的开发机器上的字符串看起来不同。了解他们做什么是修复代码的第一步。
猜你喜欢
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2020-02-25
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多