python 3 的 input() 仅安全接收原始输入并返回字符串,不解析表达式或自动类型转换;所有输入均经 stdin→bytes→str 流程,类型转换需显式调用 int()、float() 等,且空输入返回空字符串而非 none。

因为 Python 3 的 input() 就是被设计成只做一件事:安全、统一地接收原始输入,并原样转为 str。
Python 3 的 input() 不解析表达式
Python 2 的 input() 实际上等价于 eval(raw_input()),会尝试执行用户输入的任意 Python 代码——比如输入 __import__('os').system('rm -rf /') 就可能触发危险操作。Python 3 彻底移除了这种隐式求值行为,input() 只读取一行文本、去掉换行符、返回字符串。这是语言层面的安全加固,不是“忘了加类型推断”。
所有输入都走同一路径:stdin → bytes → str
底层调用的是系统标准输入流(sys.stdin),读取的是字节序列,再按默认编码(通常是 UTF-8)解码为字符串。无论你敲 42、True 还是 [1,2,3],它看到的只是字符 '4'、'2'、'T'、'r'……没有语法分析,没有 AST 构建,自然也不会有类型还原。
类型转换必须显式声明
这意味着你得自己决定怎么解释输入:
- 想当整数?写
int(input())——但要注意用户输abc会抛ValueError - 想当浮点数?用
float(input())——"inf"或"nan"能转,但"1.2.3"不行 - 布尔值不能靠
bool(input())判断真假:空字符串""是False,但"0"、"False"全是True,得手动映射
这个设计把解释权完全交给开发者,避免了“看起来像数字就自动转”的歧义和陷阱。
容易被忽略的边界情况
空输入(直接回车)返回空字符串 "",不是 None;开头/结尾空格不会被自动 strip;输入含 Unicode 符号(如 emoji、中文标点)也照单全收——这些都不是 bug,而是字符串语义的自然体现。如果你依赖“输入即有效数值”,必须加校验,而不是指望 input() 帮你兜底。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











