Как напечатать исключения Graphene-Django / Graphene-Python для консоли отладки? - PullRequest
0 голосов
/ 01 июня 2019

Когда возникает ошибка GraphQL, я не могу легко узнать, где она произошла. Я должен провести ненужное время, пытаясь выследить это. Как мне распечатать трассировку в консоли моего текстового редактора?

1 Ответ

0 голосов
/ 01 июня 2019

Я ответил на свой собственный вопрос, обратившись к ошибкам в GraphQL с помощью result.errors, перебрав список и использовав функцию python print_tb для печати трассировки.

У кого-нибудь есть другой или лучший способ сделать это?

result = schema.execute(
    mutation_str, context_value=self.request, variable_values=variable_values
)

if result.errors is None:
    # Code what happens when there are no errors
else:
    from django.conf.settings import DEBUG
    if DEBUG:
        def print_graphql_errors(errors):
            assert errors, 'Custom Error: The "errors" parameter cannot be None.'
            from traceback import print_tb
            for error in errors:
                traceback = error.stack
                # FYI: Here are some examples of attributes and what values would look like:
                    # tb_frame <frame at 0x000002DDB844D548, file 'site-packages\\graphql\\execution\\executor.py', line 455, code resolve_or_error>
                    # tb_lasti 16
                    # tb_lineno 447
                    # tb_next <traceback object at 0x000002DDBAFBA388>

                print('error.locations:', error.locations)
                print('error.positions:', error.positions)
                print('Manually Generated Traceback (with the print_graphql_errors function):')
                print_tb(traceback)
                print(repr(error))
        print_graphql_errors(result.errors)

    # Code what happens when DEBUG is False and there are GraphQL errors
...