说说废话
最近一直忙着一些事情好久没有更新了,加上最近电脑在跑一些大数据,也就九百万条数据,还是没有加上一些复杂模型的,结果我的jupyter notebook就崩掉了,最后迫不得已重装软件,还在苦苦配置环境中,等以后学习pytorch和tensorflow都不敢在本地上跑了。
程序的异常处理
今天霖小白心血来潮想来分享一下python基础中的如何异常处理,使程序有更好的用户体验。
前言
python程序对用户的输入有一定的要求,所以当实际输入不满足程序要求时,可能在程序运行过程中会直接报错无法进行下一步的运行。
例子1
因为我们使用了eval()函数,所以我们输入的数字需要是数字的,如果输入的不是一个数字,比如上面的例子就是输入的是python,是字母而不是数字就会直接报错。
使用保留字try和except进行异常处理
语法格式
try:
<语句块1>
except:
<语句块2>
语句块1是正常执行的程序内容,当执行这个语句块发生异常时,则会执行语句块2的内容。
例子2
我们在例子1的基础上进行改进,通过这两个例子的对比就可以很清楚的理解了这一部分的内容了。
try:
n = eval(input("请输入一个数字:"))
print('输入的数字的平方是{}'.format(pow(n)))
except:
print("输入错误,请输入一个数字!")
这样的话即使我们输入的是字母也不会直接报错,而是会提示你输入错误,从而可以使程序继续往下运行(如果下面有程序的话)
除此之外还可以使用这个知识内容处理程序执行中的运行异常。
例子3
在这一段代码中初始值i是0,所以下面式子为6除以0,因为python不支持除以0的操作,所以自然就会报错了。
接下来我们还是使用try和except来处理这样的异常情况。
try:
for i in range(3):
print(6/i, end=' ')
except:
print('产生除零错误')
这样就可以完美解决报错带来的烦躁感哈哈哈哈,debug的时候可以试着用它,至少霖小白要是在写一段程序的时候,要是经常报错,多多少少暴脾气就上来了,不过经历了许多,包括上面所说的jupyter notebook的服务器崩溃了,一直不断在抢救它,重装,以及环境的配置一直失败等这样也是真的很大提高了我的耐心,做到“临危不惧”哈哈哈哈,简单粗暴说就是越来越佛了。
进一步优化
例子3其实还可以进一步优化,结合特定的错误类型进行处理。例子2的错误其实就是产生了ZeroDivisionError运用错误,可以指定处理该类型错误,再添加其他错误。
try:
for i in range(3):
print(6/i, end=' ')
except zeroDivisionError:
print('产生除零错误')
except:
print('其他错误!')
没事写写猜字游戏
猜字游戏相信各位已经非常不陌生了,基础中的基础知识了,接下来也是没啥事,就来加上上面的异常处理的知识再练练基础题。
import random
number = random.randint(1,1000)
guess_count = 0
while True:
try:
guess_number = eval(input('请在1~1000中猜一个数字:'))
except:
print('输入错误,但不计次数')
continue
guess_count += 1
if guess_number > number:
print('猜大了')
elif guess_number < number:
print('猜小了')
else:
print('恭喜你猜对了')
break
print('你一个猜了{}次'.format(guess_count))
这时候有人站出来说,random.randint(1,1000)哇,这么随机怎么可能猜得到呢?有一个高效的方法,二分查找法。啥?什么是二分查找法?
百度,你值得拥有!
更多基础知识请关注公众号“一本正经的霖小白”
推文链接