Python中的异常处理

1. 什么是异常?

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 
一般情况下,在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

2. 异常处理

2.1 作用

捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。

2.2 语法格式

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("没有异常")

2.3 捕获所有异常

格式:

try:
    正常的操作
except:
    发生异常,执行这块代码
else:
    如果没有异常执行这块代码

代码:

try:
    open("test1.txt","r")
except:
    print("异常处理")
else:
    print("没有异常")

2.4 捕获多种异常

代码:

try:
    f=open("test01.txt",encoding='utf-8')
    print(f.read())
except (NameError,FileNotFoundError,TypeError) as rese:
    print("出现异常",rese)
else:
    print("没有异常")

2.5 try-finally语句

try:
    fh = open("test.txt", "r")
    fh.readlines()
    fh.close()
finally:
    print("有没有异常都会执行")
try:
    open("test0001.txt")
except:
    print("出现异常")
else:
    print("没有异常")
finally:
    print("有没有异常都会执行")

2.6 异常的传递

代码:

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---

2.7 触发异常

使用raise语句自己触发异常

案例:输入考生的成绩(0~100)

def ss(score):
    if score<0 or score>100:
        raise Exception('Invalid score',score)
    else:
        print('score:',score )
ss(200)

Python中的异常处理_第1张图片

 2.8 用户自定义异常

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自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()

Python中的异常处理_第2张图片

 

你可能感兴趣的:(Python基础,java,开发语言)