Q: Ошибка выхода за пределы границы диапазона кортежа при отмене таймера. (Python 3.5) Я сейчас пишу программу, в которой ошибка. Я нашёл место этой ошибки, она выдаётся при попытке отключить таймер. Вот кусок кода (понимаю, что тут есть куча неиспользованных переменных, просто иначе я бы не смог быстро найти место ошибки):
    import tkinter as tk
    from tkinter import ttk, colorchooser
    from tkinter import messagebox as mb
    from random import randint
    from enum import Enum
    import codecs
    root = tk.Tk()
    root.geometry("1060x800")
    root.resizable(width=False, height=False)
    TIMER = 15
    time_left = None
    timer_started = False
    paliktas_laikas = tk.Label(width = 3, height = 1, fg="#ffffff")
    round_number = 1
    start_timerok, start_timerok2, start_timerok3 = None, None, None
    answer = 0
    
    
    
    #
    
    def timer_cont():
        global time_left, timer_started, start_timerok3, start_timerok2, start_timerok
        time_left = time_left - 1
        print(str(time_left))
        paliktas_laikas["text"] = str(time_left)
        if (time_left == 0):
            choose(0)
        else:
            start_timerok2 = root.after(1000, timer_cont)
    
    def choose(x):
        global start_timerok2, start_timerok3, start_timerok
        print(x)
        root.after_cancel(start_timerok2)
    
    def oki():
        global start_timerok2, start_timerok3, start_timerok
        start_timerok2 = root.after(1000, timer_cont)
    #
    #
    def start_timer(jpg):
        global timer_started, time_left
        #root.after_cancel(start_timerok)
        if (jpg<=4):
            if (timer_started is False):
                timer_started = True
                oki()
    
    
    
    def show_variants(x):
        global place_answers, timer_started, start_timerok
        timer_started = False
        print(str(time_left))
        start_timerok = root.after(50, start_timer(x))
    
    
    
    def challengee(u):
        global who_answers_q, round_number, time_left
        time_left = TIMER
        paliktas_laikas["text"] = str(time_left)
        paliktas_laikas.place(x=390, y = 520)
        show_variants(round_number)
    
    t = tk.Button(root, height=1, width=10, command=choose(4))
    t.place(x=10, y=20)
    challengee(1)
    
    root.mainloop()

PyCharm выдаёт следующее:
    Traceback (most recent call last):
      File "/home/gamer/PycharmProjects/w0rdz/9.py", line 63, in <module>
        t = tk.Button(root, height=1, width=10, command=choose(4))
      File "/home/gamer/PycharmProjects/w0rdz/9.py", line 35, in choose
        root.after_cancel(start_timerok2)
      File "/usr/lib/python3.5/tkinter/__init__.py", line 624, in after_cancel
        script = self.tk.splitlist(data)[0]
    IndexError: tuple index out of range

Конечно, я понимаю английский, а посему догадываюсь, что тут имеет место выход за пределы диапазона кортежа. Но я в упор не вижу, в чём моя ошибка (просто почти всему, что я знаю о программировании в целом и о Python в частности, я научился сам). Подскажите мне, пожалуйста, где она. Или, вероятно, здесь нет моей вины, и мне нужно перейти на более новую версию Питона? Для меня это тайна за семью печатями.

A: По ситуации могу порекомендовать следующее:
Ошибка:
start_timerok2 имеет значение None на момент вызова root.after_cancel(start_timerok2). С очень большой вероятностью это и приводит к аварийному завершению программы.
Версия:
Не рекомендую работать со старыми версиями Python за исключением необходимости поддержки чего-то старого.
Причины:
а) В новых версиях есть много нового и полезного.
б) Написанное в старой версии может прекратить работать раньше, когда что-то будет объявлено устаревшим.
в) Отладка проще. Например, я при запуске вашего кода получал гораздо более ясное сообщение ValueError: id must be a valid identifier returned from after or after_idle вместо туманного IndexError: tuple index out of range
Я, правда, и по вашему трейсу догадывался о причине, но вам было бы проще.
Отладка:
a) Вы вставили отладочную печать в функцию с проблемой. Это правильно. Но почему-то вы запросили лишь print(x) в то время как у вас была прямая жалоба в трейсе на start_timerok2. Имело смысл его распечатать. Вы бы увидели None и, скорее всего, нашли бы ошибку.
б) Скорее всего, вы не полностью используете даже начальные возможности  отладчика. Зря - с ним гораздо проще. Не нужно ставить print, а при пошаговом проходе вы бы сразу увидели, где и почему у вас остановка. См. чуть подробнее об отладчике в моем ответе: Объясните ,что не так с кодом
Стиль программирования:
Крайне не рекомендую использовать global массово. Это плохой стиль программирования - утонете в отладке с ростом объема кода.
