【问题标题】:Python: raise Exception if file with name "foobar" gets openedPython:如果打开名为“foobar”的文件,则引发异常
【发布时间】:2018-04-27 10:59:38
【问题描述】:

我面前有一个庞大的代码库,我有一个地方可以写入名为“foobar”的文件。

我不知道从哪里读取这个文件。

我的想法如何解决这个问题:

  1. 做猴子补丁或模拟。如果打开具有此名称的文件,则应引发异常。
  2. 运行所有测试并查看引发异常的位置。

如果打开了给定名称的文件,如何让解释器引发异常?

我确定我搜索的地方是纯 python,而不是 c 扩展。

我使用 Python 2.7

【问题讨论】:

  • 你能删除或重命名文件吗?
  • @internet_user 是的,我可以,但这无助于调试,因为我猜阅读部分是首先列出目录。不会发生异常,因为目录是空的,在这种情况下没关系。

标签: python debugging


【解决方案1】:

您可以覆盖(阴影)内置打开功能。在你的主模块中添加这个:

import __builtin__

open_file = __builtin__.open

def fake_open(filename, *args, **kwargs):
    if filename == 'foobar':
        raise Exception('foobar filename')
    else:
        return open_file(filename, *args, **kwargs)

__builtin__.open = fake_open

【讨论】:

  • 有了这个答案,我在几秒钟内就在 106k Python 源代码行中找到了相应的 open()。谢谢!
  • @guettli 同样的方式,我认为,io 模块中的open 可以被遮蔽:open_io_file = io.open; def fake_io_open(): # same logic; io.open = fake_io_open
猜你喜欢
  • 2014-05-02
  • 1970-01-01
  • 2019-06-27
  • 2022-01-23
  • 2012-05-02
  • 2011-09-05
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多