那么,什么是X-Y问题呢?我举两个例子:
请大家看下面这张图:
这个同学写的爬虫代码运行一段时间以后,内存会急剧上升,因此它觉得上Requests 有内存泄漏的问题。于是大家都在回答怎么检测哪一行代码导致了内存泄漏,以及出现了内存泄漏应该怎么办。甚至有人为了复现这个问题,专门写了很长的代码,搞了几十个线程,循环请求一个网站几十万次来验证Requests在什么情况下会内存泄露。
很多人劳神费力搞了半天,最后无论怎么样都没有办法触发这个内存泄漏的问题。于是让那个提问的人把代码发上来。大家一看代码才发现,这个同学的代码里面,在while True
中不停创建线程,导致内存占用越来越高。他的整个问题跟Requests没有半毛钱关系。
第二个例子,肯定在你身上也发生过。你的代码报错了,报错原因是xxx,于是你去网上搜索xxx报错是什么原因,怎么解决。看了一下午,问题始终没有办法解决。最后让大神来从头看了一下你的代码,发现问题其实是yyy。
所谓的X-Y问题,就是发生了一个问题X,但是你根据问题的表象,以为这是问题Y,于是尝试去找Y的答案,从而浪费大量的时间和人力。
所以,如果你要提问,你必须要确保你问的是真正问题的解决方案,而不是你以为的问题的解决方案。如果你不知道真正要解决的问题是什么,为了避免出现误解,你需要先把自己的业务场景描述清楚,你期望的结果是什么,实际的结果是什么。然后给出一段脱敏后的,能复现问题的最小代码Demo,这样别人在分析问题的时候,才能帮你找到根本原因,而不是被你自以为是问题的Y牵着鼻子走。
在公众号粉丝群里面,有不少同学提问题不讲科学,毫无逻辑,上来就说:xxx报错了是什么原因?
。然后就没有然后了。
报错的原因千千万,谁知道你这个报错是什么原因,你至少把具体报错信息截图发一下,再把报错位置的代码发一下啊。
问题都不会提,就不要怪别人不想回答你了。因此,再次建议大家,提问之前做一些准备,避免浪费大家的时间:
那么如果有人的问题不是代码报错,而是类似于FastAPI怎么返回二进制文件
这种问题的话,搜索引擎会比群友更快回答你。
END