Python脚本读取TSV文件触发IndentationError错误排查求助
解决Python脚本的IndentationError问题
问题分析
你遇到的IndentationError是Python里最常见的语法错误之一,原因其实很直白:with代码块内的语句没有正确缩进。Python靠缩进(通常用4个空格或1个制表符)来划分代码块,with语句末尾的冒号:后面,所有属于这个块的代码都必须缩进,不然Python根本认不出来它们是一伙的。
你的原始脚本问题
看你贴的脚本,第3行的rown = csv.reader(...)没缩进在with块里,直接顶格写了,这就触发了报错:
import csv with open('/tmp/fa.csv') as f: rown = csv.reader(f,delimiter='\t') # 这里完全没缩进,违反了Python的代码块规则 for row in rown: print row[1]
修正后的脚本
只需要把with块里的语句统一缩进(保持风格一致,别混着用空格和制表符)就行:
import csv with open('/tmp/fa.csv') as f: rown = csv.reader(f, delimiter='\t') # 缩进4个空格,纳入with块 for row in rown: print row[1] # 继续保持缩进层级,和上一行对齐
额外小提示
- 缩进一致性:别混合用制表符和空格,这很容易搞出隐形的缩进问题,建议在编辑器里设置把制表符自动转成4个空格。
- 文件命名规范:你说这是制表符分隔的TSV文件,但文件名是
fa.csv,虽然不影响脚本运行,但改成fa.tsv会更直观,避免混淆。 - 容错处理:如果你的文件里有空行或者某一行列数不足2列,
print row[1]会抛出IndexError,可以加个简单判断防踩坑:
import csv with open('/tmp/fa.csv') as f: rown = csv.reader(f, delimiter='\t') for row in rown: if len(row) >= 2: # 确保当前行至少有2列再访问 print row[1]
内容的提问来源于stack exchange,提问作者Saikumar A
相关产品推荐
相关产品推荐

