无效的文字int base 10偶尔会出现同一个变量

时间:2015-05-21 07:14:45

标签: python-3.x tkinter

我有一个Python3.4.2 / tkinter程序,它请求一个数字用户输入,我有一个StringVar:我的问题是有时(可能大约30%的时间)它返回无效的文字int base 10,有时候它功能完美。当基本10问题发生时,我必须关闭应用程序并重新打开。打印StringVar始终返回PY_VAR0,并从使用StringVar的函数中返回,当应用程序运行时,返回的数字将返回。当基本10问题发生时,应用程序崩溃了#39;仅返回PY_VAR0,然后返回错误消息。如果它是一致的,我会理解在哪里寻找我的错误,但是它表现得非常不合理,我不知道如何开始。 我该如何调查此问题? 作业部分:

to_choose = StringVar()
#print(to_choose)
text = "\n{0}\n {1}".format("Enter number", "of Draws", pady = 10)
instruction = Label(actions_label_frame, text =text, bg = 'dark sea green', fg = 'dark slate gray')
instruction.grid(column = 2, row= 2, sticky = N)
how_many_draws_entry = Entry(actions_label_frame,  text = "", bd = 2, width = 3, bg = 'mint cream', fg = 'sea green', textvariable = to_choose, cursor = 'arrow', highlightcolor ='red')

尝试使用变量的部分:

 mains_results = []

    draw = 0                                         # identifier for draw number to separate results clearly
    main_num_draws = int(to_choose.get())
    print("from main", main_num_draws)
    # check for empty string
    '''
    try:
        main_num_draws = int(to_choose.get())
    except ValueError:
        main_num_draws = 1
   '''
    while draw < main_num_draws:                  # loop 1 
        merged = list(itertools.chain.from_iterable(final_list))   # flatten list
        # print(len(merged))                  #check length of list for pseudocheck
        random.shuffle(merged) 
        chosen = []                                 # accumulate eack pick in this list: reset here as well
        draw += 1                                   # increment draw identifier

        while len(chosen) <= 5:               # loop 2, to choose the five numbers of a draw
            pick = random.choice(merged)
            chosen.append(pick)
            merged = list(filter((pick).__ne__, merged)) # remove draw from choices(numbers)

            #print(len(merged)) #pseudocheck that values have been removed
        chosen.sort()

        mains_results.append(chosen)

和错误消息:

    main_num_draws = int(to_choose.get())
ValueError: invalid literal for int() with base 10: ''

1 个答案:

答案 0 :(得分:1)

错误消息告诉您确切的错误。当你这样做时:

main_num_draws = int(to_choose.get())

...错误消息告诉您to_choose.get()返回一个空字符串。空字符串是无效的整数。

您需要保证变量始终具有有效整数,或者您需要捕获该错误并适当地处理它。奇怪的是,你已经注释掉了完全符合这一要求的代码。

如果您打印其中一个变量并看到PY_VAR0之类的内容,那就意味着您正在执行类似print the_variable而不是print the_variable.get()的操作。对象的字符串表示不是值,它是一个独特的内部名称(Tkinter设计师IMO的愚蠢设计决定,但它就是这样)。