我是一名A级学生,正在写计算方面的课程作业,我的代码中有一小部分是把输入转化为时间,早上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))
是不是和我的数据类型有关?我不知道该怎么解决。
2条答案
按热度按时间smtd7mpg1#
这是你的
IntVar
。我不知道这是一个bug还是为了向后兼容,但是IntVar.get()
为你做了类型转换。在Python 2中,以0
为前缀的数字将被解释为八进制(即010
等于8
)。你设置的值很好,但是当它尝试get()
"08"
时,它会崩溃。搜索整个代码,问题源于实际的Tcl解释器,因为
get()
方法被作为globalgetvar()
发送到Tcl解释器,并且从那里它甚至没有被Python解释。实际上,它甚至不是一个bug- Tcl应该将0###
识别为八进制,并且这被认为是gotcha's of the language中的一个。解决这个问题的正确方法是使用一个好的数据访问对象--使用它来向sqlite发送数据和从sqlite检索数据。这样你就可以封装代码来将整数
8
转换成sqlite想要的08
。稍微更有技巧的方法是在向sqlite发送数据之前调用一个函数,看起来像这样:2g32fytz2#
取代:
用途:
这样就没有问题了,因为事先就很清楚它是字符串而不是整数。
然后,当您想要使用数字数据时,使用标准的字符串到整数转换函数-
int
将该字符串转换为整数。例如: