Понимание набора текста на python: необязательно, вызывается, повторяется для обработки ошибок при чтении файла JSON

#python #error-handling

#python #обработка ошибок

Вопрос:

Код Microsoft python с использованием RichPath и dpu_utils для загрузки файлов json. У меня возникли проблемы с тем, что делает следующий код. Он просто возвращает None, если есть ошибка? Я понимаю, что это генератор, и я могу вызвать next(tmp= test()).

 from typing import Any, List, Optional, Iterable, Callable
from collections import OrderedDict
def test( error_handling: Optional[Callable[[str, Exception], None]]=None) -> Iterable[Any]:
    fh = open('ppi/train_graph.json', 'rt', encoding='utf-8')

    try:
        for line in fh:
            try:
                yield json.loads(line, object_pairs_hook=OrderedDict)
            except Exception as e:
                if error_handling is None:
                    raise
                else:
                    error_handling(line, e)
    finally:
        fh.close()
        
gen = test()
  

Комментарии:

1. Нет, эта функция возвращает объект генератора. Он никогда не возвращает None.

2. В любом случае, Callable[[str, Exception], None] это в основном просто функция, которая принимает два позиционных аргумента, первый — строку, другой — исключение, и возвращает None . Это называется n any line , который генерирует исключение. Результат вызова этой функции не возвращается, поэтому она просто пропускает эту строку

3. хорошо, поэтому он просто пропускает строку. прохладный. Спасибо

4. Я должен был сказать: «не дает»