Python CSV阅读器应在错误输入时引发错误

Python CSV阅读器应在错误输入时引发错误,python,csv,exception,Python,Csv,Exception,我有一个名为group\u data的字符串,我想用Python的csv.reader读取它。这就是我正在打的电话 group = csv.reader(group_data.split('\n'), delimiter=';', doublequote=True, quoting=csv.QUOTE_ALL, strict=True) 我希望在出现以下情况时,这会引发一个例外: 只有一个引号:“a”;“B”bb“B”;改为“C” 属于“A”;“B”“

我有一个名为
group\u data
的字符串,我想用Python的
csv.reader
读取它。这就是我正在打的电话

group = csv.reader(group_data.split('\n'), delimiter=';', 
                   doublequote=True, quoting=csv.QUOTE_ALL, strict=True)
我希望在出现以下情况时,这会引发一个例外:

  • 只有一个引号:
    “a”;“B”bb“B”;改为“C”
    属于
    “A”;“B”“bb”“B”;“C”)
  • 任何字段都不可用 引用:
    A;BC
    而不是
    “A”;“B”;“C”

但是,上面的摘录接受这两行是正确的,即使使用了
doublequote=True
quoting=csv.QUOTE_ALL
strict=True
设置。我是否应该设置另一个选项使其失败?如果这是不可能的,是否有其他方法可以快速注意到是否有单引号或未引号字段?

就其价值而言,Python 3.4似乎拒绝了您的第一个示例:

In [8]: mkreader = lambda x: csv.reader(x.split("\n"), delimiter=";", doublequote=True, quoting=csv.QUOTE_ALL, strict=True)
In [11]: for l in mkreader('''"A";"B ""bb"" B";"C"'''): print(l)
['A', 'B "bb" B', 'C']
In [12]: for l in mkreader('''"A";"B "bb" B";"C"'''): print(l)
...
Error: ';' expected after '"'
尽管它允许第二种情况:

In [13]: for l in mkreader('''A;B;C'''): print(l)
['A', 'B', 'C']
看看,这似乎是因为
QUOTE\u ALL
严格来说是一个编写器设置,而不是读卡器设置:

csv.QUOTE_ALL
    Instructs writer objects to quote all fields.
与之相比:

csv.QUOTE_NONNUMERIC

    Instructs writer objects to quote all non-numeric fields.

    Instructs the reader to convert all non-quoted fields to type float.
所以如果你想要的话,你需要自己做这个。这很简单,如果您知道
永远不会出现在您的行中(情况似乎是这样,因为您没有设置
escapechar
):


他有一个朋友。我注意到,在Python3.4的第一种情况下,reader命令本身并没有引发错误,但当您在for循环中使用该读取器时,它确实会引发错误。我想我必须手动创建第二个检查。谢谢你的帮助!嗯,这似乎比我希望的要复杂,因为我必须基本上实现自己的csv阅读器(拆分换行符,然后拆分分号,然后检查引号)。
In [19]: def check_line(line):
    for word in line.split(';'):
        if word[0] != '"' or word[-1] != '"':
            raise csv.Error("Bad input.")
In [20]: check_line("A;B;C")
...
Error: Bad input.