Python--异常处理

很久以前有一个同学问我,你怎么能记住什么时间添加异常以及添加什么异常呢?
当时把我问住了,说用的多就记住了(当时我也很“白”)!他也很“虚心”的点了点头,最近在整理自己私有的学习过程,所以才贴到博客园里面。突然翻到这一篇!对不起,我没给你讲清楚!神人并不是真的神人,踩的坑多了,自然就成了神!
下面我来解释这个问题。

正篇:
1、起初:我们写程序思维属于直线型
2、其次:我们碰到了异常,怎么写异常?抓什么异常呢?
3、最后:调试
第一段程序:猜数字游戏1
===============================================================================
import random
num = random.randint(0,101)
while True:
guess_num = int(input("请输入您猜的数字"))
if guess_num > num:
print("猜的数太大了")
elif guess_num < num:
print("猜的数太小了")
else:
print("猜对了")
break

发现 guess_num是转换成int的,如果我输入字符串呢? 怎么加异常,加什么异常?

关键点来了:故意出错,看你的开发工具给你报的什么异常;那么就加什么异常!

输入abc,报错如下:

Traceback (most recent call last):
File "D:/PycharmProjects/guess.py", line 24, in <module>
guess_num = int(input("请输入您猜的数字"))
ValueError: invalid literal for int() with base 10: 'dd'

这样可以很明显的看出来,错误的原因是因为ValueError,那么就添加try....来捕获ValueError异常。

===============================================================================
#修改之后的代码如下:
import random
num = random.randint(0,101)
# print(num)

while True:
try:
guess_num = int(input("请输入您猜的数字"))
if guess_num > num:
print("猜的数太大了")
elif guess_num < num:
print("猜的数太小了")
else:
print("猜对了")
break
except ValueError:
print("请输入数字,谢谢!")
print("恭喜过关")

======================多重异常处理===================================
try:
read = open("d:\\abcd.txt", "r") # 打开一个文件 第一个坑
str = read.readlines(1)
try:
num=int(str) #第二个坑
print("读取第一行:",num)
except TypeError:
print("不能转换为int")
except IOError:
print('文件不存在')
###############################################try...finally
try:
read = open("d:\\abc.txt", "r") # 打开一个文件 第一个坑
str = read.readlines(1)
try:
num=int(str) #第二个坑
print("读取第一行:",num)
except TypeError:
print("不能转换为int")
except IOError:
print('文件不存在')
finally:          #finally:1、无论是否捕获异常都会执行2、为异常提供清理,未来关闭或者释放系统资源;
read.close()
print("已经关闭")

'''
1、raise
2、assert
'''
##########################################################################
try:
s = None
if s is None:
print ("s 是空对象")
raise NameError #如果引发NameError异常,后面的代码将不能执行
print (len(s)) #这句不会执行,但是后面的except还是会走到
except TypeError:
print ("空对象没有长度")
###########################assert########################################
a=3
b=5
assert 8 == a+b #正常
assert 5 == a+b #有异常
























posted @ 2017-12-08 10:36  王亚锋  阅读(184)  评论(0编辑  收藏  举报