Попытка передать дополнительный аргумент в библиотеку переключателя приводит к ошибке «Объект NoneType не вызывается» - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь передать два аргумента в функцию переключателя, затем использовать один из этих аргументов для определения регистра переключателя, а один из них передать в функцию регистра. Часть кода, которую я предоставил, имеет функцию для одного из случаев, остальные отформатированы аналогично.

Я не уверен, что это правильный подход к созданию этой функции или почему я получаю эту ошибку.

right = 1
def Default():
    print('Something went wrong :(')
def Right(duration):
    pyautogui.moveTo(1123,899) #Right Arrow Button
    pyautogui.mouseDown()
    time.sleep(duration)
    pyautogui.mouseUp()
    time.sleep(0.03)
def Move(direction,duration):
    switcher = {
        1: Right(duration) ,
        2: Left ,
        3: Down ,
        4: DiagonalUp 
        }
    return switcher.get(direction, Default)()
x = 2.5
Move(right,x)

Я получаю ошибку: строка 48, в движении возвращение switcher.get (направление, по умолчанию) () Ошибка типа: объект 'NoneType' не может быть вызван

Я не получаю эту ошибку, если вообще не включаю переменную продолжительности в код.

1 Ответ

0 голосов
/ 12 июля 2019

Функции, которые не возвращаются, неявно возвращают None. Итак, это:

def Default():
    print('Something went wrong :(')

такой же, как этот:

def Default():
    print('Something went wrong :(')
    return None

Что означает, что ваш диктат get пытается сделать это:

return switcher.get(direction, None)()

Поскольку в switcher нет ключа None, возвращается None, а затем None() запускается ..., что недопустимо, поскольку callable(None) = False

Вам нужно Default, чтобы фактически вернуть законный ключ switcher или raise исключение.

...