异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
案例演示:
print(sd) #NameError
stu={'name':'jack','age':18}
print(stu['names']) #KeyError
ss='ndjf'
print(ss[9]) #IndexError
aa='asdf'
print(aa.index('j')) #ValueError
if 5>'1':
pass #TypeError
f=open('word.txt') #FileNotFoundError
print(5/0) #ZeroDivisionError
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
else:
<语句> #如果没有异常发生
代码:
try:
open("qwe.txt","r")
print("123")
except FileNotFoundError:
print("异常处理")
else:
print("没有异常")
try:
open("qwe.txt","r")
print("123")
except FileNotFoundError as result:
print("异常处理",result)
else:
print("没有异常")
格式:
try:
正常的操作
except:
发生异常,执行这块代码
else:
如果没有异常执行这块代码
代码:
try:
open("test1.txt","r")
except:
print("异常处理")
else:
print("没有异常")
代码:
try:
f=open("test01.txt",encoding='utf-8')
print(f.read())
except (NameError,FileNotFoundError,TypeError) as rese:
print("出现异常",rese)
else:
print("没有异常")
try:
fh = open("test.txt", "r")
fh.readlines()
fh.close()
finally:
print("有没有异常都会执行")
try:
open("test0001.txt")
except:
print("出现异常")
else:
print("没有异常")
finally:
print("有没有异常都会执行")
代码:
def func1():
print("---func1--1---")
print(num)
print("---func1--2---")
def func2():
print("--func2--1---")
func1()
print("--func2--2---")
def func3():
try:
print("---func3--1---")
func1()
print("--func3--2----")
except Exception as result: #Exception包含所有异常
print(result)
print("--func3---3---")
func3()
#func2()
返回值:
---func3--1---
---func1--1---
name 'num' is not defined
--func3---3---
使用raise语句自己触发异常
案例:输入考生的成绩(0~100)
def ss(score):
if score<0 or score>100:
raise Exception('Invalid score',score)
else:
print('score:',score )
ss(200)
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接 或间接的方式
class Error(Exception):
# def __init__(self): #初始化方法(没有参数)
# pass
def __init__(self,len,atleast): #初始化方法(有参数)
self.lenth=len
self.minlenth=atleast
def main():
try:
word=input('请输入密码:')
if len(word)<6:
# raise引发自定义的异常
#raise Error() #实例化没有参数
raise Error(len(word),6) #实例化方法
except Exception as re: #re是一个对象
# print('Error:输入密码长度过短!!!') #没有参数传递
# print('Error:输入密码长度过短,密码长度至少为%d位' % (Error.minlenth), re) #类不能调用实例属性 AttributeError: type object 'Error' has no attribute 'minlenth'
print('Error:输入密码长度过短,密码长度至少为%d位\n'%(re.minlenth),'re:',re)
else:
print('无异常')
main()