【问题标题】:_tkinter.TclError: expected floating-point number but got "08" (looks like invalid octal number)_tkinter.TclError:预期的浮点数,但得到“08”(看起来像无效的八进制数)
【发布时间】:2017-04-14 10:31:25
【问题描述】:

我是一名 A-level 学生,正在编写他的计算机课程。我的一小部分代码接受输入,将它们变成时间。早上 8 点显示如下: 08 ,因为这就是 SQLite 喜欢的方式。但是,将其转换为日期时,我在标题中收到错误消息:

_tkinter.TclError: expected floating-point number but got "08" (looks like invalid octal number)

这也发生在 09 上,但不会发生在 06 或 07 上。

代码:

variable_start = IntVar(root)
variable_start.set("Select Start Time")

option_add_start =  ttk.Combobox(window1, textvariable = variable_start,width = 20, state = 'readonly')
option_add_start['values'] = ("06", "07", "08", "09", "10", "11", "12", "13", "14", "15",
"16", "17", "18","19", "20")

hour1 = variable_start.get()
min1 = variable_start_min.get()
starttimehour = str(datetime.time(hour1,min1,second))

这与我的数据类型有关吗?我不确定如何解决它。

【问题讨论】:

  • 能否请您发布您的完整代码,包括您如何定义变量hour1min1 等?
  • @pkqxdd hour1 和 min1 都没有明确定义为某种数据类型,所以我猜它们是字符。我的代码不是很整洁,这就是导致我认为的问题的原因。这只是我的程序的一部分,其他模块不会影响这个,但是如果你想要我的完整代码,那么我会提供一个很长的链接。
  • 您是否 100% 确定您使用的是 Python 3.x? Python 2 有 0 作为前缀表示八进制数(参见 here),但 3.x 不认为这种形式是有效的(它使用 0o 表示八进制数)。
  • @Delioth 是的,我 100% 在 python 3 中工作,确切地说是 python 3.6.1。

标签: python-3.x tkinter


【解决方案1】:

这是你的IntVar。我不知道这是一个错误还是为了向后兼容,但IntVar.get() 会为您进行类型转换。在 Python 2 中,以0 为前缀的数字将被解释为八进制(即010 等于8)。您将值设置得很好,但是当它尝试 get() "08" 时它会爆炸。

搜索代码,问题源于实际的 Tcl 解释器,因为 get() 方法作为 globalgetvar() 发送到 Tcl 解释器,并且从那里它甚至不被 Python 解释。实际上,它甚至不是一个错误——Tcl 应该将0### 识别为八进制,这被认为是gotcha's of the language 之一。

解决这个问题的正确方法是使用一个好的数据访问对象——使用它来向 sqlite 发送和检索数据。这样,您可以封装代码以将整数 8 转换为 sqlite 想要的 08。稍微笨拙的方法是在将数据发送到 sqlite 之前调用单个函数,如下所示:

anInt = variable_start.get()
serialInt = serialize(anInt)
send_to_sqlite(serialInt) // I've not worked with SQLite, so this line is pseudocode.

serialize(int):
    new = str(int)
    if(new < 10):
        new = "0" + new
    return new

【讨论】:

  • 感谢您的解释,它真的很有帮助。我修改了你的一些代码,以便我更容易理解,但它并没有改变它的工作方式。我也遇到了一些错误,因此将 str(int) 更改为 2 个不同的命令,因为在将其与整数进行比较之前将其设为字符串不起作用,因此如果满足条件,我将其转换为字符串,谢谢!
猜你喜欢
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多