Вместо того, чтобы сосредоточиться на разнице между eval(“input()”)
и eval(input())
, давайте сосредоточимся на их первичном сходстве: вы не должны делать ни одно из них!
Я не знаюОткуда идиома eval(input())
появилась в Python 3, возможно, это неправильное понимание переноса input()
пользователями Python 2, которые не научились использовать raw_input()
вместо этого, но избегали его!
Правильный ответ в этомСитуация такова: если вы хотите str
, выполните:
x = input()
, если вы хотите int
, выполните:
x = int(input())
Но прекратите использовать eval()
как выповторное открытие вашей программы для всех видов злоупотреблений со стороны потенциального пользователя:
>>> x = eval(input('enter: '))
enter: __import__("os").system("rm *")
>>>
Не пытайтесь делать это дома!Или работайте!
Если вы хотите ввести постоянные структуры данных Python, вы можете попробовать literal_eval()
из модуля ast:
>>> from ast import literal_eval
>>> my_dict = literal_eval(input('enter dict: '))
enter dict: {'a': 1, 'b': 2, 'c': 3}
>>> my_dict
{'a': 1, 'b': 2, 'c': 3}
>>> type(my_dict)
<class 'dict'>
>>>
Но все же будьте осторожны!