我正在辅导一个邻居的子元素,在将int()函数与返回字符串的input()一起使用之前,我们正在探索它.我们try 了以下方法:

int(5)
int(5.5)
int('5')
int('5.5')

前三名按预期返回5人;最后一个抛出了错误

ValueError:基数为10的int()的文本无效:"5.5"

鉴于前三行的行为,我如何向14岁的子元素解释这个错误(背景=会说4种语言,但数学不那么热门)?

UPDATE

输入字符串的格式不正确.

推荐答案

简言之:because that's what the spec says.这是一种很有用的心态

为什么说明书上这么说?函数只能接受有限数量的类型作为有效输入.int函数试图涵盖两种不同的用例:

  1. 将整数的字符串表示形式转换为实际的int
  2. float值转换为int,并将其截断*

第三个用例"convert the string representation of a floating point number to an 100"不在规范中,因为语言设计师决定不涵盖它.这似乎是一个合理的决定,因为他们需要在函数可以接受和不可以接受的类型之间划清界限.浮点数的字符串表示应该由float而不是int来解析.

* Actually: any object that has an 100 method, but lets keep it simple.


作为反例,在PHP can中,您try 将任何字符串转换为int,它将try 为您提供最佳匹配:

php > echo (int)'3.14';
3
php > echo (float)'3.14';
3.14
php > echo (int)'3 little pigs';
3
php > echo (int)'there are 3 little pigs';
0

老实说,这是相当疯狂的行为,尤其是最后一次.Python有一个严格的(er)类型系统;如果你试图将一个字符串解析为int,那么它必须是一个整数的完全有效表示,而不仅仅是某个地方包含可以解释为数字的东西.

Python-3.x相关问答推荐

在多个测试中维护和报告变量

Python:字典和列表:在列表字典中搜索子列表的有效方法

在Python中从列创建新行

Django将任何查询显示为html表格

如何将多个字典合并到一个列中,并为不同的行使用相同的键

从PYTHON中获取单行和多行的Rguar表达式

如何将python点击参数设置为与选项回调不同的参数的别名?

在REPLACE INTO中引用变量会抛出sqlite3.OperationalError

如何键入提示函数,在 Python 中通过类decorator 添加到类中

在 pytest 中,如何测试 sys.exit('some error message')?

Semaphore信号量 Python 的工作原理

Dask worker post-processing

将变量传递给 Google Cloud 函数

在 Pandas 数据框中显示对图

pip install dryscrape 失败并显示错误:[Errno 2] 没有这样的文件或目录:'src/webkit_server'?

创建集合的 Python 性能比较 - set() 与 {} 文字

tkinter TclError:错误的文件类型使用 askopenfilename

混合全局/参数和名为top的函数的奇怪python行为

带有数千个逗号刻度标签的 MatPlotLib 美元符号

在 Visual Studio Code 中调试 Scrapy 项目