编程语言
首页 > 编程语言> > [Python学习笔记]Python基础-15 关键字,上下文,异常处理

[Python学习笔记]Python基础-15 关键字,上下文,异常处理

作者:互联网

finally关键字的使用

使用finally关键字可以在程序退出时继续执行需要执行的代码
不包含异常退出情况
例子:

try:
    pass
except:
    pass
else:
    pass
finally:
    pass  # 此处代码会在程序退出时继续执行完毕
def test(a,b):
    x = a + b
    return x
    return "hello"  # 此处语句不会被执行

def demo(a,b):
    try:
        x = a/b
    except ZeroDivisionError:
        print('除数不能为0')
    else:
        return x
    finally:
        return 'good' # 如果函数中有finally,finally中的返回值会覆盖之前的返回值

with语句的使用

上下文管理器

class Demo(object):
    def __enter__(self):
        print('__enter__方法被调用了')
        return self

    def __exit__(self,exc_type,exc_val,exc_tb):
        print('__exit__方法被调用了')

def create_obj():
    x = Demo()
    return x

with create_obj() as d:
    # 此处变量 d 不是 create_obj 的返回结果
    # 此处的 d 可以理解为 d = create_obj().__enter__()
    print(d)

自定义异常

class MyError(Exception):
    def __init__(self,x,y) -> None:
        self.x = x
        self.y = y

    def __str__(self) -> str:  # 通过重写自己定义的错误类的 __str__方法,可以自定义抛出的错误内容
        return '长度必须要在{}到{}之间'.format(self.x,self.y)
        

password = input('请输入你的密码:')
m = 12
n = 8
if n <= len(password) <= m:
    print('密码正确')
else:
    raise MyError(n,m)

高级装饰器

def time(clock):
    def handle_action(fn):
        def do_action(name,game):
            if clock <= 21:
                fn(name,game)
            else:
                print ('太晚了可以睡觉了')
        return do_action
    return handle_action

@time(20)
def play_ganmes(name,game):
    print(name + '正在玩' + game)

play_ganmes('zhangsan','wzry')

可迭代对象

# 测试一个对象是否算是可迭代对象
# 如果该实例是由collections.abc下的Iterable创建出来的
# 则该实例是一个可迭代对象
# 示例如下
from collections.abc import Iterable

class Demo(object):
    def __init__(self,x) -> None:
        self.x = x

class Demo_iter(object):
    def __init__(self,x) -> None:
        self.x = x

    def __iter__(self):  # 当类中存在__iter__方法时,使用该类创建出来的实例对象就是可迭代对象
        pass

d = Demo(100)
print(isinstance(d,Iterable))   # isinstance:用于判断一个实例对象是否是由指定的类创建出来的

d_iter = Demo_iter(100)
print(isinstance(d_iter,Iterable))  

names = []
print(isinstance(names,Iterable))

标签:__,15,Python,self,finally,print,return,上下文,def
来源: https://www.cnblogs.com/Lz-heng/p/16595205.html