Python: как я могу поймать исключение и продолжить? - PullRequest
2 голосов
/ 18 октября 2011

Почему у вас есть список как чисел, так и других объектов?Похоже, вы пытаетесь компенсировать недостаток дизайна.

На самом деле, я хочу, чтобы это работало так, потому что я хочу сохранить данные, которые уже закодированы в JsonedData (),затем я хочу, чтобы модуль json дал мне какой-то способ вставлять «необработанные» данные элемента, а не значения по умолчанию, чтобы закодированные данные JsonedData можно было повторно использовать.

вот код, спасибо

import json
import io
class JsonedData():
    def __init__(self, data):
        self.data = data
def main():
    try:
        for chunk in json.JSONEncoder().iterencode([1,2,3,JsonedData(u'4'),5]):
            print chunk
    except TypeError: pass# except come method to make the print continue
    # so that printed data is something like:
    # [1
    # ,2
    # ,3
    # , 
    # ,5]

Ответы [ 2 ]

4 голосов
/ 18 октября 2011

поместите try / except внутри петли вокруг json.JSONEncoder().encode(item):

print "[",
lst = [1, 2, 3, JsonedData(u'4'), 5]
for i, item in enumerate(lst):
    try:
        chunk = json.JSONEncoder().encode(item)
    except TypeError: 
        pass
    else:
        print chunk
    finally:
        # dont print the ',' if this is the last item in the lst
        if i + 1 != len(lst):
            print ","
print "]"
3 голосов
/ 18 октября 2011

Используйте параметр skipkeys для JSONEncoder(), чтобы он пропускал элементы, которые он не может кодировать.Или создайте метод default для вашего объекта JsonedData.См. документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...