苏南大叔非常喜欢使用vscode来编辑代码,但是最近使用vscode编辑代码的时候,却出了个非常容易被忽略的小bug。本文,就说说由于使用了vscode编辑器,而引发的一个很难察觉的bug。

苏南大叔:使用vscode编辑代码时,tab键处理不当引发的问题 - vscode-tab-bug
使用vscode编辑代码时,tab键处理不当引发的问题(图2-1)

本文测试环境:win10python@3.6.8vscode@1.64.2。大家好,这里是苏南大叔的博客“程序如此灵动”,本文描述的问题是:“由tab键自动转义引起的惊天bug大案”。

问题描述

本文中的代码是python的,不过使用vscode编辑其它语言的代码时,估计也会有类似的问题。下面是这个问题的基本事情经过。

苏南大叔正在准备知识图谱的三元组文本资料,三元组文本准备以tab键做间隔。然后,在代码中,是这样写的:

fo = open("test.txt", "w", encoding='utf-8')

name = "苏南大叔"
university = "北京大学"
line = name + "    " + "毕业于" + "    " + university + "\n"
fo.writelines( line )

fo.close()

其实就是非常简单的字符串连接。结果,再次使用tab去分割这些字符串的时候,却发生了诡异的分割错误的现象。这个问题是怎么解决的呢?

请观察下面语句中的连续空格:

line = name + "    " + "毕业于" + "    " + university + "\n"

这里,苏南大叔是使用键盘左上角的tab键输入的,然而编辑器却给转换成了四个连续空格,导致后续的分割逻辑错误。

解决方案一(推荐)

其实,问题主要是在输入tab键的时候,vscode会自动转换为个4个空格。那么,代码中所表达的使用tab键表示分隔符。实际上变成了使用4个空格来表达。注意,这个可是vscode自作主张修改的逻辑,并不是大家的真实想法。

所以这里,解决方案就是,在字符串连接的时候,使用/t来表达tab键,而不是使用键盘上的那个tab键。这样的话,后续逻辑就一切正常了。

上述代码中的关键部分,要改成这样的表达方式:

line = name + "\t" + "毕业于" + "\t" + university + "\n"

解决方案二

或者也可以修改vscode中,关于tab键的设定。具体可以参考下面的连接:

苏南大叔:使用vscode编辑代码时,tab键处理不当引发的问题 - tab-setting
使用vscode编辑代码时,tab键处理不当引发的问题(图2-2)

相关文章

结束语

这个诡异的问题,琢磨了好一阵,才发现bug的产生原因,是那么的离奇。更多vscode使用技巧。请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。