Определения функций, TypeError - PullRequest
1 голос
/ 15 мая 2019

Я написал следующий код. Когда я набираю 1-5, он работает хорошо, но когда я пытаюсь набрать что-то вроде a, 6, он возвращает ошибку:

Python сообщает "Ошибка типа: объект 'str' не вызывается"

def a():
    a = input("Type 1-5\n")
    if a == '1':
        print("Your abnswer is \'1'")
    elif a == '2':
        print("Your abnswer is \'2'")
    elif a == '3':
        print("Your abnswer is \'3'")
    elif a == '4':
        print("Your abnswer is \'4'")
    elif a == '5':
        print("Your abnswer is \'5'")
    else:
        a()

a()

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Вы повторно используете имя функции a в качестве переменной с тем же именем. Измените имя функции или переменной, и это сработает.

0 голосов
/ 15 мая 2019

Python сообщает "Ошибка типа: объект 'str' не вызывается"

Это означает, что Python пытается вызвать локальную переменную a, которая является str.

Из вашего кода:

def a():
    a = input("Type 1-5\n")
    ...
    else:
        a()

Кажется, вы пытаетесь снова вызвать функцию a(), чтобы принять новые входы, когда предыдущий ввод недействителен. Вместо этого вы можете зациклить вызов функции a() за пределами функции, которая будет повторяться, когда ввод неверен.

def get_input():
    a = input("Type 1-5\n")

    if a == '1':
        print("Your answer is \'1'")
    elif a == '2':
        print("Your answer is \'2'")
    elif a == '3':
        print("Your answer is \'3'")
    elif a == '4':
        print("Your answer is \'4'")
    elif a == '5':
        print("Your answer is \'5'")
    else:
        print("Invalid input")
        return False  # we did not get a valid input

    return True  # we successfully received a valid input

is_valid_input = False
while not is_valid_input:
    is_valid_input = get_input()

Обратите внимание, что я также переименовал функцию в get_input, чтобы сделать ее более понятной. Он также отличает ее от локальной переменной с тем же именем (a), что помогает избежать такого типа TypeError, который у вас есть, потому что более понятно, какой из них является str, а какой - функцией.

$ python3 test.py
Type 1-5
6
Invalid input
Type 1-5
a
Invalid input
Type 1-5
1
Your answer is '1'
$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...