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()奇怪的报错的更多相关文章
- python 学习之FAQ:文档内容写入报错
2017.3.29 FAQ 1. 文档内容写入报错 使用with open() as file: 写入文档时,出现'\xa9'特殊字符写入报错,通过print('\xa9')打印输出“©”. > ...
- python学习之路-day2-pyth基础2
一. 模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...
- Python学习之路-Day2-Python基础3
Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...
- Python学习之路-Day2-Python基础2
Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...
- Python学习之路-Day1-Python基础
学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- python学习之路网络编程篇(第四篇)
python学习之路网络编程篇(第四篇) 内容待补充
- python 学习之路开始了
python 学习之路开始了.....记录点点滴滴....
- python学习之路,2018.8.9
python学习之路,2018.8.9, 学习是一个长期坚持的过程,加油吧,少年!
随机推荐
- JSP介绍
1.JSP简介 JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导.许多公司参与一起建立的 ...
- SpringBoot之配置文件加载位置
1.SpringBoot启动会扫描application.properties或者application.yml文件作为springboot的配置文件.默认创建项目生成application.prop ...
- git 的详解
https://blog.csdn.net/youzhouliu/article/details/78952453
- .NET SQLServer数据库转MySql
第一步:找到下图两个组件,卸载. 第二步:NuGet下载下图组件. 第三步:在连接数据库OnConfiguring方法处,做如下修改: protected override void OnConfig ...
- mysql 联合表(federated)及视图
1)验证环境 源库:192.168.8.75 centos 7.5 mysql8.3 目标库:192.168.8.68 redhat 6.8 mysql5.7 2)登录源库并创建源表 $ mysql ...
- wget 使用
1.很多软件官网会有安装脚本,并把脚本搞成raw模式,方便下载后直接运行的shell文件.比如docker wget -qO- get.docker.com | bash -q的含义是:--quiet ...
- c语言判断闰年作业
#include <stdio.h> int main() { int year,a; printf("请输人年份y:\n"); scanf("%d" ...
- For in + 定时器
Fon in for/in 语句用于循环对象属性. 循环中的代码每执行一次,就会对对数组的元素对象的属性进行一次操作. <p id = "demo"><p> ...
- Vue的自定义组件之间的数据传递
一,父级传向子级 1,在子级的属性中添加props:['myname',......],参数可以传多个,看具体而定: 2,在父级data中定义好需要传递的变量数据,例如name:"rose& ...
- 网络请求get和post的区别
网络请求get和post的区别 其实本文更应该放在HTTP相关的分类,但是目前我并没有开设这一个分类专栏,so临时储存在HTML分类吧 Get和post是HTTP请求的两种基本方式 get是从服务器上 ...