python学习之路之int()奇怪的报错
Posted yinxianglong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习之路之int()奇怪的报错相关的知识,希望对你有一定的参考价值。
今天闲来无事看了下python基础知识,当学到数据类型转换的int()方法时候。发现了这么一个有意思的事情,算是IDE或是解释器的一个小BUG。(具体原因暂不明,留待以后查找问题)
先讲下环境
- 操作系统: windows10
- python版本:3.6.5
- IDE环境: pycharm edu 2018.1 x64
- 解释器: CPython
然后 int()方法的作用
函数 | 说明 |
int(x[,base]) | j将x转换为一个整数 |
闲话少说上代码:
情况1:
# -*- coding:utf-8 -*- >>>age=input() >>>print(int(age)) 15
输出正常
情况2:
# -*- coding:utf-8 -*- >>>print(int(15.6)) 15 #使用int()转换的时候,会强制省略小数点后面的数字
输出正常
情况3:
# -*- coding:utf-8 -*- age = input("请输入年龄:") if int(age)>=18: print("恭喜你已经成年了") else: print("你还需要在成长")
如果用户输入的是正常的不带小数点的整数字符串,那么转换输出没有问题。
当用户输入浮点型字符串后,开始数据类型转换时,出现了这么奇怪的报错:
# -*- coding:utf-8 -*- age = input("请输入年龄:") if int(age)>=18: #这里的age是字符串类型,但是在条件表达式中是作为数字对待的 print("恭喜你已经成年了") else: print("你还需要在成长") #执行以上参数后,输入值15.6,出现以下报错(不光是输入带小数点的数字字符串,只要是非整数以外的字符,均会报错) Traceback (most recent call last): File "C:/pythonstudy/startpython/day1.py", line 6, in <module> if int(age)>=18: ValueError: invalid literal for int() with base 10: ‘15.6‘ #值错误:int()以10为底的无效文字:‘15.6‘
可是情况1输入小数点的数字转换的时候是没有问题的。问题出在哪呢?
通过百度找到了解决方法
# # -*- coding:utf-8 -*-import re #引入正则模块 age = input("请输入年龄:") totalCount = re.sub("D", "", age) #使用正则的sub方法过滤掉输入的字符串中age带的非数字字符和空的值。 if int(totalCount)>=18: print("恭喜你已经成年了") else: print("你还需要在成长")
当输入带有小数点的字符串的时候,不会再出现值错误的报错。(但是乱输入非数字符号还是会报错)。但是打印totalConunt,你会发现这种方式不光去掉了字符串age中带的非数字字符和空值,连小数点就去掉了。
但是通过如下代码:
# -*- coding:utf-8 -*- age = int(float(input("请输入年龄:"))) if int(age)>=18: print("恭喜你已经成年了") else: print("你还需要在成长")
你会发现输入小数点又可以了。又不会报错了。
初步推测,int()函数能转换纯整数数字的字符串,不带小数点的(带小数点就会报错。int(方法应该是认为小数点不属于纯整数范畴))。float()能转换纯整数数字字符串或带小数点的纯浮点数字符串。
以上是关于python学习之路之int()奇怪的报错的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段