python - 忽略语句体?
问题描述
class Test:
def __init__(self):
pass
def __enter__(self):
pass
def __exit__(self, exc_type, exc_val, exc_tb):
pass
with Test():
print (1) # any way to ignore it?
有没有办法忽略(不执行)with
语句体?
也就是说,在这种情况下,我不想print (1)
被执行(但我不想将此表达式包装在函数中,等等)
我需要这个用于一个个人实验项目。
尝试了一些选项,例如抛出异常,但它似乎不起作用。
PS:我不能将with
body 包裹在任何结构中(至少在调用 Test 类之前)。我想在 Test 类中实现这一点,例如,当调用一个类时,一些monkeypatch 可能会起作用等等。
PS2:忽略 with body 后程序应该仍然可以工作
解决方案
from contextlib import suppress
class Pass(Exception):
...
class _skip:
def __enter__(self):
raise Pass
def __exit__(self, exc_type, exc_val, exc_tb):
pass
suppress = suppress(Pass)
skip = _skip()
with suppress, skip:
print('ABC')
raise SyntaxError
print('XYZ')
print('Hello World')
您可能不with suppress, skip:
完全喜欢这种语法,但我非常相信它们可以被包装到一个管理器中,只是我懒得去做,这似乎已经足够好了。
推荐阅读
- node.js - 如何在 GET 请求的 EJS 文件中包含 JS 变量?
- android - 即使 FirebaseUser 不为空,FirebaseUser 也会返回空电子邮件
- angular - 如何在Angular中将字符串转换为数字
- scala - 编译器找不到伴随对象中定义的隐式定义
- c# - 有没有更快的方法来添加数组?
- python - 在python 2.7中对大数进行幂运算后长整数是错误的
- javascript - 即使我在 2 个不同的范围内声明变量,为什么仍然存在重复错误?
- javascript - Javascript fetch - 读取错误的请求响应时遇到问题
- swift - CollectionViewCell 返回表达式类型错误
- python - 使用在 python 2 中腌制的 python 3 取消腌制文件