Пропустить плохой EOL в Python

Я читаю из CAT трубы в Linux, используя subprocess:

stdout=subprocess.PIPE

поэтому в какой-то строке есть BAD EOL, это огромный файл, и я хочу пропустить такие строки и перейти к следующей. как я могу сделать это в Python?

PS: я всегда получаю:

SyntaxError: EOL while scanning string literal

и, кажется, некоторые сокеты остановились во время записи в этот файл, потому что я вижу действительно огромные пробелы в конце этого файла. Не хочу это исправлять, хочу пропустить это

вот мой код:

import sys,os
import subprocess
import traceback
import re
import ast




try :
        cat = subprocess.Popen(["hadoop", "dfs", "-cat", "PATH TO FILE"], stdout=subprocess.PIPE)
        for data in cat.stdout:
                data = re.sub(' +',' ',data)
                msg= ast.literal_eval(data)
                if  msg['some_string'] == 'some_string' :
                        print msg['status']
                else :
                        continue
except :
        print traceback.format_exc()
        pass
exit()

поэтому вывод перед выходом из программ: много пустых мест и...

                                                        ^

SyntaxError: EOL при сканировании строкового литерала

2 ответа

Решение

Вот, попробуйте это:

import sys,os
import subprocess
import traceback
import re
import ast




try :
        cat = subprocess.Popen(["hadoop", "dfs", "-cat", "PATH TO FILE"], stdout=subprocess.PIPE)
        for data in cat.stdout:
                data = re.sub(' +',' ',data)
                try:
                    msg= ast.literal_eval(data)
                    if  msg['some_string'] == 'some_string' :
                        print msg['status']
                    else :
                        continue
                except SyntaxError:
                    continue #skip this line

except :
        print traceback.format_exc()
        pass
exit()

Надеюсь, поможет!

Чтобы пропустить ошибки, вы можете просто набрать что-то вроде:

try:
    your code
except {Your error}:
    pass

или же

try:
    your code
except:
    pass

за все ошибки

Вы также можете использовать что-то вроде:

import sys
import traceback

try:
    {code}
except Exception:
    _type, _value, _trace = sys.exc_info()
    print "Type:\n\t{0}\nException:\n\t\t{1}\nTraceback:\n\t{2}".format(
          _type, _value, traceback.format_tb(_trace))
Другие вопросы по тегам