gpt4 book ai didi

python - 如何在 Python 运行时修补函数中的一行

转载 作者:行者123 更新时间:2023-12-05 07:27:29 25 4
gpt4 key购买 nike

我正在使用第 3 方库来解析某些特定于域的文件。好的是库可以正常工作,坏的是库有一些我想修改的小问题,不好的是我正在使用的函数大约有 2000 行。我只想修改 if 表达式中的一个正则表达式,有没有一种方法可以在不修改原始库的情况下“修复”它?

最佳答案

您可以使用 unittest.mock.patchwith 语句中交换任何内容。如果没有看到代码,我无法确切地告诉您如何执行此操作,但如果正则表达式已经在全局中,您可以在调用期间替换它。

如果它是由函数内部编写的字符串文字构成的,您可以改为修补它传递给的任何函数,例如 re.compilere.match 等。做一个包装器来检查你想要替换的字符串,替换它,然后委托(delegate)给真正的函数。 (在 with 语句之外保存对真实事物的引用,如果您不希望堆栈溢出,请使用它:)


old_compile = re.compile
with patch.object(re, 'compile', lambda s: old_compile('eggs' if s == 'spam' else s)):
bad_library_function()

此示例假设 bad_library_function 调用了 re.compile,其中包含一个您不喜欢的字符串文字 'spam',而您更愿意这是鸡蛋。该补丁将其替换为一个新函数,该函数将 'spam' 参数视为 'eggs',否则表现与原始 re.compile 函数,但仅限于 with 语句的持续时间。


这种猴子修补方法非常脆弱。如果您更新库并更改了实现,您的补丁可能会中断。

关于python - 如何在 Python 运行时修补函数中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53951790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com