这是一个傻瓜,但请忍受我。
我正在调用一个库,该库的功能可以无限期地等待某种输入。不幸的是,此函数的错误方式是它允许从其读取的管道中填充不相关的输入,从而导致程序在等待其自身视而不见的输入时锁定。该库非常关键,很难复制,并且维护者不接受请求请求或错误报告。
我需要向该函数的主体中注入一个“冲洗管道”函数调用。以前,我已经利用具有回调参数的类似函数解决了此问题,但是此特定函数没有此类参数。
我能做些什么?
似乎您可以查看源代码,因此您可以做的是遍历源代码并找到在bugged方法内部调用的方法,然后对其进行猴子修补:
class OtherGuysClass:
def buggedMethod(self, items):
for item in items:
a = self.convert(item)
print(a * 5)
def convert(self, str):
return int(str)
if __name__ == "__main__":
try:
OtherGuysClass().buggedMethod([1, 2, None, 5])
except Exception as e:
print("Bugged method crashed: " + str(e))
# Replace convert with our own method that returns 0 for None and ""
o = OtherGuysClass()
original_convert = o.convert
def float_convert(str):
if str:
return original_convert(str)
return 0
o.convert = float_convert
o.buggedMethod(["1", "2", None, "5"])
5
10
窃听方法坠毁:INT()参数必须是一个字符串,一个字节状物体或数字,而不是“NoneType”
5
10
0
25
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句