代码之家  ›  专栏  ›  技术社区  ›  telliott99

Python中的不可修补异常

  •  1
  • telliott99  · 技术社区  · 16 年前

    这个问题是在这篇文章中提出来的 question

    import csv
    FH = open('data.csv','wb')
    line1 = [97,44,98,44,99,10]
    line2 = [100,44,101,44,102,10]
    for n in line1 + line2:
        FH.write(chr(n))
    FH.write(chr(0))
    FH.close()
    
    import _csv
    
    FH = open('data.csv')
    reader = csv.reader(FH)
    for line in reader:
        if '\0' in line:  continue
        if not line:  continue
        try:
            print line
        except _csv.Error:
            print 'error'
    

    $ python test.py 
    ['a', 'b', 'c']
    ['d', 'e', 'f']
    Traceback (most recent call last):
      File "test.py", line 14, in <module>
        for line in reader:
    _csv.Error: line contains NULL byte
    

    因此,我猜文件中包含NUL会导致“不可修补”异常。

    问题是,除了先清理文件外,最好的处理方法是什么?“不可跟踪”异常有多常见?

    4 回复  |  直到 9 年前
        1
  •  7
  •   jldupont    16 年前

    回溯清楚地表明问题与“for”语句有关。

        2
  •  4
  •   jcdyer Anand S Kumar    16 年前

    它不是不可追踪的,你只是试图在错误的地方捕捉它。错误发生在以下行中:

    for line in reader:
    

    您正在使用try块:

    print line
    

    您可以如其他答案所示包装整个块,或者通过扭曲循环来手动操作csv阅读器的迭代来隔离异常:

    while 1:
        try:
            line = f.next()
        except StopIteration:
            break
        except csv.Error:
            print "Error occurred"
        process_line(line)
    

        3
  •  0
  •   jamessan    16 年前

    引发异常的代码不在try/except中。

    Traceback (most recent call last):
      File "test.py", line 14, in <module>
        for line in reader:
    

    for

        4
  •  0
  •   Philippe F    16 年前

    试试这个:

    FH = open('data.csv')
    try:
        reader = csv.reader(FH)
        for line in reader:
            if '\0' in line:  continue
            if not line:  continue
                print line
    except _csv.Error:
        print 'error'
    
    推荐文章