关于TypeError和ValueError错误判断的一点点实践

作为一个大一萌新中的小菜鸡,在做编程题目时遇到过很多磕磕绊绊的障碍,在这里,我就记录下自己的一些发现,和跟我一样的萌新们一起进步!
我做到了这样一道题目:

题目描述: Pile 想实现一个判断素数的函数。当这个数是素数的时候输出 ‘True’ ,不是素数输出 ‘False’
但是她是一个粗心的孩子,她有时候会输入一些奇怪的字符串,这个时候你需要输出 ‘invalid’。
**输入:**输入一行一个字符串表示 Pile 的输入。
**输出:**对于输入,输出一行字符串 ‘True’ ‘False’ 或者 ‘invalid’ 表示结果
**提示内容:**可能会触发的错误有TypeError和ValueError
这是我第一次提交的代码
上图是我第一次提交的代码,但是一直不能通过评判系统,我单独测试了一下我判断素数的部分,程序没有问题(判断素数其实定义一个函数会更加好…),那肯定就是我的两个Error判断出问题了。我仔细想了想我的代码,a=eval(input()),input()函数会返回一个字符串类型结果,eval()函数可以将字符串转换成有效表达式
在这里插入图片描述
在这张图中,我把TypeError注释掉了,也就是现在程序无法对TypeError做出对策,当我输入字符串“abc”时,会有如下结果:
在这里插入图片描述
这里之所以会报错,是因为pow()函数中的参数只能是数值类型(整数或浮点数),而我输入的是一个字符串,经过eval()函数处理,返回的还是一个字符串类型
那接下来我们就把TypeError的注释去掉吧:(可以看到,去掉对TypeError的注释程序就能对类型错误采取相应措施了)
去掉TypeError的注释
但是,这个时候,问题又来了,加上TypeError类型错误解决了,那ValueError怎么办呢?是否可以如我们所愿,直接在后面再将上一个Except TypeError就可以了呢?我们就上面的程序输入一个小数试试
输入了一个小数居然结果返回了True!  !  !ValueError是不是没起作用啊?!
注释掉ValueError,发现确实它没起到作用!
为什么没起到作用呢?因为我们程序里面似乎没有对Value做出任何要求(比如要求数为整数…)
下面了,我们先看看ValueError和TypeError到底指的是什么仔细看看
在语句a=eval(input())中,我们如果输入3.3,eval()函数会返回3.3的浮点数据没有Value错误,我们想要出现ValueError应该把a=eval(input())换成a=int(input()),input()返回一个字符串,int()函数可以接受字符串,但这个字符串不具备表示一个整数的含义,比如我们输入3.3,input()返回字符串‘3.3’,但字符串’3.3’不具备表示一个整数的含义,即int()函数不能直接整数化一个带小数点的字符串,所以会报错。
这个时候就报ValueError啦!
去掉对ValueError的注释所的结果
现在看似好像问题都要解决了,但是现在的TypeError好像显得有点多余了,不管我输入什么,input()都会返回一个字符串类型,对于int()函数来说,只要不是输入的整数,就都会报错,加上except ValueError之后就会返回invalid,所以现在只存在ValueError一种错误啦,我们就可以删掉except TypeError了
这是我正确通过评判系统的代码,比较初级。。。

这是我后来改进的代码,运行时间减少了一些,还有,其实具体的错误类型根本不用写出来,前面的讨论只是在分析我出错的原因!

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值