Python CSV严格模式测试:求触发报错的异常CSV示例
如何触发CSV Dialect strict模式的差异?
我懂你现在的困扰——明明设置了dialect.strict=True,但测试下来和False没区别,根本触发不了预期的错误。先看看你这段代码:
dialect = csv.Sniffer().sniff(fd.readline(), delimiters=',;') dialect.strict = True fd.seek(0) reader = csv.DictReader(fd, dialect=dialect) for row in reader: print(row)
要触发strict=True的异常,你需要构造CSV格式不符合规范且超出模块默认容错范围的数据。根据Python的csv模块定义,strict=True会强制要求输入严格遵循CSV格式,一旦发现格式错误(比如不匹配的引号、错误的字段分隔位置)就抛出csv.Error;而strict=False时,模块会尝试忽略这些错误继续解析。
给你一个能精准触发差异的测试CSV数据:
name,age,email Alice,30,"alice@example.com Bob,25,bob@example.com" Charlie,35,"charlie@example.com"
为什么这段数据能触发差异?
- 第一行
Alice的email字段用双引号开头,但未闭合就换行到下一行 - 第二行
Bob的email字段用双引号结尾,但开头没有对应的引号
当你把这段数据存成test.csv后:
- 设
dialect.strict=True运行代码,会直接抛出格式错误类的csv.Error - 设
dialect.strict=False运行代码,模块会尝试容错解析(比如把Alice和Bob的行错误合并),但不会抛出异常
之前你测试的数据可能只是模块默认就能兼容的小问题(比如多余空格),所以没触发strict模式的差异。用上面这个例子就能明显看到两种模式的区别了。
内容的提问来源于stack exchange,提问作者Pavel Madr
相关产品推荐
相关产品推荐

