欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python中的异常处理

程序员文章站 2022-07-14 11:03:11
...

try-except:

try:
#   print(abc)
    open("abc.txt")
except NameError:
    print("没有定义变量。。。。。")
except FileNotFoundError:
    print("没有文件.....")

捕获多个异常:

#coding=utf-8
try:
     print(abc)
#    open("abc.txt")
except (NameError,FileNotFoundError):
    print("没有定义变量。。。。。")

获取异常的基本信息:

try:
#   print(abc)
    open("abc.txt")
except (NameError,FileNotFoundError) as result:
    print("产生了一个异常....%s"%result)

获取所有异常:

import time
try:
#   while True:
#        print("---ahaha---")
#        time.sleep(1)

    print(abc)
except Exception as result:
    print("----s--s-s-s-s-s-s----")
    print(result)
except:
    print("----ahahahah----")

捕获异常:

try:
    #如果产生了一个异常,但是except没有捕获,那么就会按照这个异常默认的处理方式进行
    open("aaa.txt")
    a = 100
    print(a)
except NameError:
    #如果在try中的代码产生了一个NameError时,才会执行的异常处理
    print("捕获到了一个异常")
else:
    #在try中的代码都没有产生异常的时候,才会执行的代码
    print("-----1-----")

finally:

try:
    #如果产生了一个异常,但是except没有捕获,那么就会按照这个异常默认的处理方式进行
    open("aaa.txt")
    a = 100
    print(a)
except NameError:
    #如果在try中的代码产生了一个NameError时,才会执行的异常处理
    print("捕获到了一个异常")
else:
    #在try中的代码都没有产生异常的时候,才会执行的代码
    print("-----1-----")
finally:
    print("-----最后执行的实行-0----")

异常传递:

def test1():
    print("------1-1------")
    print(num)
    print("------1-2------")


def test2():
    print("------2-1------")
    test1()
    print("------2-2------")


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


test3()

自定义异常:

class Test(Exception):
    def __init__(self, length, atleast):
        self.length =  length
        self.atleast = atleast


try:
    raise Test(1,2)
except Test as result:
    print("---f-f-f-f-f----")
    print(result.length)
    print(result.atleast)

异常处理中抛出异常:

class Test(object):
    def __init__(self, switch):
        self.switch = switch #开关

    def calc(self, a, b):
        try:
            return a/b
        except Exception as result:
            if self.switch:
                print("捕获开启,已经捕获到了异常,信息如下:")
                print(result)
            else:
                #重新抛出这个异常,此时就不会被这个异常处理给捕获到,从而触发默认的异常处理
                raise


a = Test(True)
a.calc(11,0)

print("----------------------华丽的分割线----------------")

a.switch = False
a.calc(11,0)