Пропустить плохой 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))