Как аргумент ключевого слова None преобразуется в тип данных int? - PullRequest
0 голосов
/ 03 ноября 2018

Отказ от ответственности: это не мой код. Он возник из graphics.py , созданного доктором Джоном Зелле.

Где rate объявлено как число? Я понимаю, что это ключевой аргумент типа None, но как это pauselength = 1/rate-(now-_update_lasttime) допустимо? Насколько мне известно, это говорит о том, что 1 делится на None.

import time, os, sys

try:  # import as appropriate for 2.x vs. 3.x
   import tkinter as tk
except:
   import Tkinter as tk

# global variables and functions

_root = tk.Tk()
_root.withdraw()

_update_lasttime = time.time()

def update(rate=None):
    global _update_lasttime
    if rate:
        now = time.time()
        pauseLength = 1/rate-(now-_update_lasttime)
        if pauseLength > 0:
            time.sleep(pauseLength)
            _update_lasttime = now + pauseLength
        else:
            _update_lasttime = now

    _root.update()

Простой эксперимент:

a = None
b = 1
print(b/a)

Показывает следующую ошибку (которая имеет полное значение):

TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

1 Ответ

0 голосов
/ 03 ноября 2018

Если rate равно None, условное if rate: ложно, поэтому не выполняется ни один код в следующем блоке (включая проблемное разделение). Единственный код, который работает в этой ситуации - _root.update().

...