04.异常

2018-09-24  本文已影响8人  JerryChenn07

1、异常简介

异常就是程序运行错误或者逻辑混乱。需要给客户友好的提示。

异常一般是程序中无法完全避免,一般通过一定的手段,尽量减少异常的发生。

异常:
当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"

2、捕获异常

2.1捕获异常 try...except...

2.2except捕获多个异常

path = input('输入文件的路径:')
content = None
try:
    content = open(path,'r',encoding='utf-8').read()
except FileNotFoundError as ex:
    print('4......')
    print('输入的路径不存在')
    print(ex)
print('5......')
print(content)

2.3异常处理没有作用域

2.4捕获所有异常

2.5else

2.6finally

3、异常的传递

3.1try的嵌套

import time
try:
    #f = open('test.txt')
    f = open(r'C:\Users\Administrator\Desktop\xx.txt')
    try:
        while True:
            content = f.readline()
            if len(content) == 0:
                break
            num=1/0 #模拟一个异常
            #time.sleep(2)
            print(content)
    #except:
        #print('except...')
    finally:
        f.close()
        print('关闭文件')
except:
    print('没有这个文件')

3.2函数嵌套调用

def test1():
    try:
        print("----test3-1----")
        test1()
        print("----test3-2----")
    except Exception as result:
        print("捕获到了异常,信息是:%s"%result)

    print("----test3-2----")

test1()

总结

4、抛出自定义的异常

class NameShortException(Exception):
    def __init__(self,msg,num):
        self.msg = msg
        self.num = num


def f():
    '''这是输入姓名并判断,如果姓名的长度小于3,抛出NameShortException异常'''
    name = input('请输入姓名:')
    if len(name.strip())<3:
        #手动抛出一个异常对象,以后的代码不再运行
        raise NameShortException('名字的长度至少是3',len(name.strip()))
    print('f......')


def main():
    try:
        f()
    except Exception as ex:
        print('错误信息是:%s,输入的字符串长度是:%s'%(ex.msg,ex.num))
    print('其它代码。。。。。。。')

main()

#请输入姓名:12
#错误信息是:名字的长度至少是3,输入的字符串长度是:2
#其它代码。。。。。。。

以后在mvc框架中,都会有异常处理。在最外层进行处理。

try:

    #你写的代码

except Exception as ex:
    将异常信息写到日志文件中

else:

finally:


print('over......')


所以,你写的代码可以处理异常,也可以不处理。
一般要写一定的异常处理,为了让代码继续运行。

还有,可以将异常继续抛出。为了让系统异常日志记录下来
class SexException(Exception):
    def __init__(self,msg,value):
        self.msg = msg
        self.value = value

def f1():
    sex = input('请输入性别:')
    if sex!='男' and sex!='女':
        raise SexException('性别只能输入男或者女',sex)
    print('f1...over.....')
        
def f2():
    #num  = 1/0             # raise ZeroxxxError('除以0 了,不行')
    f1()
    print('f2...over.....')

def main():
    try:
        f2()
    except Exception as ex:
        #print(ex.msg)
        raise
    print('main...over.....')

#框架
try:
    #你的代码
    main()
except Exception as ex:
    #将错误信息写到文件中记录下来,打印模拟记录
    print(ex)
上一篇下一篇

猜你喜欢

热点阅读