当前位置: 首页 > 面试题库 >

跳过-with-块的执行

车诚
2023-03-14
问题内容

我正在定义一个上下文管理器类,并且如果实例化过程中满足某些条件,我希望能够跳过代码块而不会引发异常。例如,

class My_Context(object):
    def __init__(self,mode=0):
        """
        if mode = 0, proceed as normal
        if mode = 1, do not execute block
        """
        self.mode=mode
    def __enter__(self):
        if self.mode==1:
            print 'Exiting...'
            CODE TO EXIT PREMATURELY
    def __exit__(self, type, value, traceback):
        print 'Exiting...'

with My_Context(mode=1):
    print 'Executing block of codes...'

问题答案:

如果您想要一个临时解决方案,它使用withhacks(特别是来自AnonymousBlocksInPython)的思想,那么它将起作用:

import sys
import inspect

class My_Context(object):
    def __init__(self,mode=0):
        """
        if mode = 0, proceed as normal
        if mode = 1, do not execute block
        """
        self.mode=mode
    def __enter__(self):
        if self.mode==1:
            print 'Met block-skipping criterion ...'
            # Do some magic
            sys.settrace(lambda *args, **keys: None)
            frame = inspect.currentframe(1)
            frame.f_trace = self.trace
    def trace(self, frame, event, arg):
        raise
    def __exit__(self, type, value, traceback):
        print 'Exiting context ...'
        return True

比较以下内容:

with My_Context(mode=1):
    print 'Executing block of code ...'

with My_Context(mode=0):
    print 'Executing block of code ... '


 类似资料:
  • 问题内容: 在阅读语句(链接)的规范时,我想尝试一些事情。这不是针对任何生产代码或任何内容的,我只是在探索,因此,如果这是一个坏主意,请不要太苛刻。 我想做的是在上面的链接文档中抓取一个名为“ BLOCK”的片段,然后在对的调用中进行修改。(在动机和总结部分开始之后,请参阅链接的文档。) 这个想法是创建我自己的即时本地命名空间。像这样: 基本上,我希望块内的语句从属于的局部变量和分配约定。 在我的

  • 我创建了一个包含两种登录机制的项目: > < li> 第一个是使用简单登录页面的第一个认证机制(使用函数< code>findUser从数据库中获取用户(如果存在)) 第二种认证机制是JAAS提供的登录机制(j_security_check) 基本上,我试图实现这个目标:当用户成功进行身份验证(在第一个登录页面中)时,他应该能够跳过第二页登录(由JAAS提供),而不必在登录表单中重新输入他的用户名

  • 我有一个由mysql数据库支持的dropwizard应用程序。我正在使用liquibase包装器进行数据库迁移 首先,我使用“db dump”命令自动生成迁移。xml文件。 现在我正在重构数据库,我希望能够更新特定的列名和表的名称。 我使用先决条件跳过已经生成的表以跳过“”命令 现在如何跳过主键和外键约束的执行?在变更日志级别是否有一个先决条件可以用来表示“跳过已执行的变更集”?或者我只是创建一个

  • 问题内容: 我们需要能够在某些环境中跳过子模块。 有问题的模块包含集成测试,并且需要半小时才能运行。因此,我们希望在CI服务器上进行构建时将其包括在内,但是当开发人员在本地进行构建(并运行测试)时,我们希望跳过该模块。 有没有办法通过配置文件设置来做到这一点?我已经进行了一些谷歌搜索,并在这里查看了其他问题/答案,但没有找到一个好的解决方案。 我想一个选择是从父级中完全删除该子模块,然后在CI服务

  • 在以前的版本中,我刚刚能够生成这样的新组件。。。 错误:多个模块匹配。使用skip-import选项跳过将组件导入最近的模块。 然后我试着。。。 错误:指定模块不存在 然后我试着。。。 错误:指定模块不存在

  • 我得到了 我错过了什么?