[Python学习笔记]Python基础-15 关键字,上下文,异常处理
作者:互联网
finally关键字的使用
使用finally关键字可以在程序退出时继续执行需要执行的代码
不包含异常退出情况
例子:
try:
pass
except:
pass
else:
pass
finally:
pass # 此处代码会在程序退出时继续执行完毕
- finally关键字的注意事项
- 如果函数中有finally语句,finally语句中的返回值会覆盖之前的返回值
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语句的使用
- with被称之为上下文管理器,可以关闭很多需要手动关闭的连接
- 文件连接
- socket连接
- 数据库连接
- with关键字后的对象,需要时限
__enter__
和__exit__
魔法方法
上下文管理器
- with 语句后面的结果对象,需要重写
__enter__
和__exit__
方法 - 当进入到with代码块时,会自动调用对象
__enter__
方法中的代码 - 当with代码块执行完成之后,会自动调用
__exit__
方法
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)
自定义异常
- 系统内置了很多异常
- ZeroDivisionError:0作为分母
- FileNotFoundError:文件不存在
- ValueError:值错误
- KeyError:key不存在
- 使用 raise 关键字可以在程序出错时抛出异常
- 通过定义一个错误类型,集成自 Exception 可以创建一个自定义的错误类型
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')
可迭代对象
- 可迭代对象
- list
- tuple
- dict
- set
- str
- range
- filter
- map
- for...in...循环需要跟一个可迭代对象
# 测试一个对象是否算是可迭代对象
# 如果该实例是由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