Python3.x基础学习-异常报错处理

异常处理

异常就是语法正常的前提下,程序运行时报错就是异常
当python脚本发生异常时我们需要捕获处理它,否则程序会终止执行

print('hello world')
print(1/0)        # ZeroDivisionError: division by zero
print('代码结束')
异常处理 try,except,else,finally,raise
程序从上到下执行,先执行try的代码,如果代码报错,则不会执行下面的代码
执行except中的异常代码
如果try没报错,则不执行except中代码

try:
    print('hello word')
    print(1/0)
except IndexError:
    print('索引异常')

except ZeroDivisionError:
    print('o是除数异常')

except:
    print("代码有错误")
print('最后的代码')

常见的报错信息:

ZeroDivisionError,IndexError,NameError,FileNotFoundError,FileExistsError,TypeError

try正常执行结束,不会走except,走else
try中有错误,走except,不走else
无论代码有无异常,都会走finally

 
try:
    print("abc")
    print(1/0)
    print('b')
except BaseException:
    print("出现错误了")
else:
    print("没有异常")
finally:
    print("有无异常都得给我跑起来")
 

内层try无法捕获异常,会向外传递
外层异常无法捕获,会继续向外传递,知道捕获异常为止,没捕获报错

try:
    with open('test2.py','w+') as f:
        content = f.read()
        try:
            with open('test3.txt','r') as f:
                print(f.read())
        except FileExistsError:
            print("文件未发现错误")
except BaseException:
    print('外层捕获')

变量名也可以作为异常的对象,一般使用e来表示
e对象中包含了异常信息的一些描述,我们可以根据描述做不同的处理

try:
    print("hello world")
    print(1/0)
    print("over")
except Exception as e:
    print(e)


def func1():
    print("--func1-1-")
    print(num)
    print('---func1-2-')

def func2():
    try:
        print('---func2--1')
        func1()
        print('----func2--2')
    except FileNotFoundError:
        print("func1出现异常")
    else:
        print('----func2--3')
    finally:
        print("最后的代码")

try:
    func2()
    print('func2执行完了')
except NameError:
    print("命名错误")
 


用户可以根据业务逻辑手动抛出异常
并且用户可以根据需求来抛出系统异常(python 已经定义好的异常)和用户自定义异常

扫描二维码关注公众号,回复: 10838197 查看本文章
try:
    name = a
    if name.isalpha():
        raise Exception('不能全是字母')
except BaseException as e:
    print("----exception----",e)


class ShortInputException(Exception):
    pass

try:
    raise ShortInputException('输入太短')
except BaseException as e:
    print(e)

# 判断输入的字符串长度,如果小于指定长度就报错
class MyException(Exception):
    def __init__(self,length,atleast):
        self.length = length #输入的字符串长度
        self.atleast = atleast
    def __str__(self):
        return '长度{},规定长度{}'.format(self.length,self.atleast)

try:
    msg = input("请输入:")
    if len(msg)<5:
        raise MyException(len(msg),5)
except Exception as e:
    print(e)



猜你喜欢

转载自www.cnblogs.com/johnsonbug/p/12709995.html