中断或退出“with”语句?

2024-02-06

我只想退出with特定条件下的声明:

with open(path) as f:
    print 'before condition'
    if <condition>: break #syntax error!
    print 'after condition'

当然,上面的方法是行不通的。有没有办法做到这一点? (我知道我可以反转条件:if not <condition>: print 'after condition'——有什么办法像上面那样吗?)


with给你添麻烦了?扔更多with- 能够解决问题的对象!

class fragile(object):
    class Break(Exception):
      """Break out of the with statement"""

    def __init__(self, value):
        self.value = value

    def __enter__(self):
        return self.value.__enter__()

    def __exit__(self, etype, value, traceback):
        error = self.value.__exit__(etype, value, traceback)
        if etype == self.Break:
            return True
        return error

只需将您要表达的表达式括起来即可with with fragile, and raise fragile.Break随时爆发!

with fragile(open(path)) as f:
    print 'before condition'
    if condition:
        raise fragile.Break
    print 'after condition'

此设置的好处

  • Uses with只是with;不会将您的函数包装在语义上误导性的一次性“循环”或狭隘的专门函数中,并且不会强迫您在with.
  • 保持局部变量可用,而不必将它们传递给包装函数。
  • 可嵌套!

    with fragile(open(path1)) as f:
        with fragile(open(path2)) as g:
            print f.read()
            print g.read()
            raise fragile.Break
            print "This wont happen"
        print "This will though!"
    

    这样,您就不必创建新函数来包装外部函数with如果你想两者都打破。

  • 根本不需要重组:只需将已有的内容包装起来即可fragile就可以开始了!

此设置的缺点

  • 实际上并没有使用“break”语句。无法赢得所有人;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中断或退出“with”语句? 的相关文章

随机推荐

  • 使用 Facebook (PHP SDK) 和 Codeigniter 进行身份验证

    好吧 这几天我一直在尝试将 Facebook 身份验证集成到我基于 Codeigniter 的网站中 我已将 Facebook PHP SDK 作为一个库包含在内 并且似乎连接得很好 但是当我在 SDK 中使用 getUser 方法时 会返
  • 如何拥有一个显示不同uitableview建议的搜索栏

    我想在导航栏上有一个搜索栏 当用户开始输入时 显示一些建议 但另外 uitableview 必须与搜索结果不同 例如 用户开始输入 wh 然后显示一个包含white wheater who 的列表 然后 当按下搜索按钮时 会显示其他列表和结
  • Safari 浏览器的媒体查询

    我希望媒体仅在 1280 像素屏幕的 Safari 上运行 这适用于所有浏览器 但我只想要 safari media screen and width 1280px Try this Webkit Chrome 和 Safari 任何版本
  • Android 人脸检测仅适用于绘图,不适用于 SD 卡中的图像

    所以我有代码可以在任何给定的图像文件中检测最多 10 张面孔 并向我返回信息 例如眼睛的位置和其他类似信息 因此 当我告诉它使用存储在我的项目资源的可绘制文件夹中的图像文件时 它效果很好 但是当我尝试从 SD 卡导入的位图中查找面孔时 它不
  • 高分自包含在 .xap 中

    想知道这是否可能 我正在为一个有趣的办公项目制作一个小游戏 并且需要有一个高分表 该表独立于实际的 Silverligth xap 中 有办法做到这一点吗 不 不是 您可以将表存储为数据 即在 XML 文件中 但您无法修改该文件并在 XAP
  • 无法一次选择一个单选按钮

    我无法一次选择一个单选按钮 多个按钮被选中 我是 html 新手 这是我的代码 请帮忙
  • ColdFusion 从文本文件中提取值

    技术细节 我想从包含参数名称和值的文本文件中提取值 对于以 request config 开头的每一行 有空行 带注释的行等 我不想从中提取任何内容 我想提取这些值 以粗体显示 请求 配置 我的参数1 一些随机字符串 我认为最好的方法可能是
  • 计算点之间的距离

    我正在尝试使用 Scala 类计算两点之间的距离 但它给出了一个错误说 类型不匹配 找到 other type 具有基础类型 Point required def x 请注意 隐式转换不是 适用 因为它们不明确 两种方法any2Ensuri
  • 从 SQL Server 表中随机选择 n 行

    我有一个 SQL Server 表 其中包含大约 50 000 行 我想随机选择其中大约 5 000 行 我想到了一种复杂的方法 创建一个带有 随机数 列的临时表 将我的表复制到其中 循环遍历临时表并用RAND 然后从该表中选择随机数列 本
  • 使用参数的 Xamarin Forms 应用程序链接

    我有个问题 我想从我的 php 页面启动我的应用程序并通过该链接传递一个变量 然后在我的应用程序网站上 我需要读取参数并使用该参数执行我想要的操作 现在我已经找到这个链接 Xamarin Android 使用带参数的链接启动应用程序 htt
  • 如何将完整的字符串写入文件?

    我现在正在 Windows 中编程 但可移植代码也将受到欢迎 我现在使用的是fwrite 4 但此函数需要写入文件的最大元素数 我可以用strlen 1 在这里 但我想知道是否有更好的方法来做到这一点 Use fputs http www
  • Flutter:- 如何在屏幕上显示动态小部件?

    我想以乱码形式显示输入的文本 即单词的每个字母需要单独显示Container连续 为此 我正在接受文本输入 并将其存储在List
  • NHibernate 不只保存一个属性

    我正在尝试更新表中的单个列 没有发出任何更新 使用 SQL Profiler 检查 没有错误 类映射有dynamic update true 类上未启用版本控制 刷新模式提交 映射的属性没有任何插入 更新修饰符
  • .NET core/Python 从 Azure 存储 Blob 读取前 X 行

    我有一个大斑点 我需要从中提取前几行 我可以在不打开整个文件的情况下执行此操作吗 该文件采用已知格式 通常为 Excel 有时为 csv 或 tsv 只要知道这是否可能就会非常有帮助 在搜索微软和其他论坛时 我根据日期得到了不同的答案 谢谢
  • 在 Mac OS 上从 Transformer 类导入管道函数时,Jupyter 内核崩溃

    我无法导入 Transformer 类的管道函数 因为我的 jupyter 内核一直死机 尝试使用 Transformer 4 15 0 和 4 16 2 有人遇到过这个问题吗 我尝试将类导入到新笔记本中 如图所示 它不断杀死内核 这对我来
  • 检查 DataFrame(Scala) 是否为空的最快方法?

    如何检查 DataFrame Scala 以最快的方式为空 我用DF limit 1 rdd isEmpty 比 DF rdd isEmpty 更快 但并不理想 有没有更好的方法可以做到这一点 我通常会打电话给first围绕一个Try im
  • Git 合并因分段错误而失败

    我有一个大型合并 涉及很多inexact rename 但失败并出现以下情况 Performing inexact rename detection 100 169817200 169817200 done Performing inexa
  • 将 RTSP 流转换为 HTTP 并使用 VLC 客户端进行流传输

    我有一个通过 RTSP 提供流的 IP 摄像机 我可以使用以下 URL 在带有 VLC 播放器的 PC 上播放它 rtsp 192 168 1 52 554 user admin password channel 1 stream 0 sd
  • Apache HttpClient:setConnectTimeout() 与 setConnectionTimeToLive() 与 setSocketTimeout()

    有人可以解释一下这两者之间有什么区别吗 client HttpClientBuilder create setConnectionTimeToLive 1 TimeUnit MINUTES build and RequestConfig r
  • 中断或退出“with”语句?

    我只想退出with特定条件下的声明 with open path as f print before condition if