常见异常
# # NameError
# print(a)
# # IndexError: 索引错误
# li = [1,2,3,4]
# print(li[8])
# # KeyError
# d = dict(a=1, b=2)
# print(d['f'])
# # ZeroDivisionError: 除0错误
# print(10/(2-2))
# class Student(object):
# def __init__(self, name, age):
# self.name = name
# self.age = age
# def echo(self):
# print(self.name, self.age)
#
# # AttributeError: 对象没有该属性
# s1 = Student("westos", 10)
# # print(s1.scores)
# # s1.echo()
# # s1.echo1()
# # FileNotFoundError
# with open('/tmp/passwd9') as f:
# print(f.read(5))
# 总结: 在程序运行过程中影响程序正常运行的内容, 称为异常.
try_except语句
try :
print(a)
except NameError:
print("name error" )
print("hello" )
print("hello1 " )
try :
f = open("hello.txt" , 'w' )
f.write("这是一个测试文件" )
except IOError as e:
print(e)
else :
print("文件内容写入成功" )
finally :
f.close()
print("文件已经关闭" )
不指定异常类型的except使用
try :
f = open('hello.txt' )
f.read()
except :
print("捕获所有的异常...." )
else :
print("如果没有捕获到异常, 执行else语句" )
finally :
f.close()
print("有异常或者没有异常都会执行" )
捕获多个异常
# 异常处理
# assert(断言):
# NameError, KeyError
# try:
# d = dict(a=1, b=2)
# print(d['f']) # KeyError
# print(a) # NameError
# except KeyError as e:
# print(e)
# except NameError as e:
# print(e)
# else:
# print("没有产生异常")
# finally:
# print("无论是否产生异常的清理操作")
#
# print("new start")
try :
d = dict(a=1 , b=2 )
print(d[c]) # KeyError
print(a) # NameError
except (KeyError, NameError) as e:
print(e)
else :
print("没有产生异常" )
finally:
print("无论是否产生异常的清理操作" )
print("new start" )
抛出异常 触发异常
class AgeError (BaseException) :
pass
def get_age (age) :
if 0 < age <= 200 :
print(age)
else :
raise AgeError('invaild age' )
get_age(1000 )
get_age(100 )
异常案例
while True :
try :
x = int(input("Please enter a number: " ))
break
except ValueError:
print("Oops! That was no valid number. Try again" )
抛出异常与继承
class B (Exception) :
pass
class C (B) :
pass
class D (C) :
pass
for cls in [B, C, D]:
try :
raise cls()
except D:
print("D" )
except C:
print("C" )
except B:
print("B" )
断言
assert
def is_huiwen_num (num) :
snum = str(num)
return snum == snum[::-1 ]
if __name__ == "__main__" :
assert is_huiwen_num(101 ) == True
print("assert" )
assert is_huiwen_num(100 ) == True , "error"