# Buggy code
def build(self, resource_identifiers=None):
    source_store_keys = self.source_store.list_keys()
    if self.name == "validations" and self.validation_results_limit:
        source_store_keys = sorted(
            source_store_keys, key=lambda x: x.run_id.run_time, reverse=True
        )[: self.validation_results_limit]

    for resource_key in source_store_keys:
        # if no resource_identifiers are passed, the section
        # builder will build
        # a page for every keys in its source store.
        # if the caller did pass resource_identifiers, the section builder
        # will build pages only for the specified resources
        if resource_identifiers and resource_key not in resource_identifiers:
            continue

        if self.run_name_filter:
            if not resource_key_passes_run_name_filter(
                resource_key, self.run_name_filter
            ):
                continue
        try:
            resource = self.source_store.get(resource_key)
        except exceptions.InvalidKeyError:
            logger.warning(
                f"Object with Key: {str(resource_key)} could not be retrieved. Skipping..."
            )
            continue

        if isinstance(resource_key, ExpectationSuiteIdentifier):
            expectation_suite_name = resource_key.expectation_suite_name
            logger.debug(
                "        Rendering expectation suite {}".format(expectation_suite_name)
            )
        elif isinstance(resource_key, ValidationResultIdentifier):
            run_id = resource_key.run_id
            run_name = run_id.run_name
            run_time = run_id.run_time
            expectation_suite_name = (
                resource_key.expectation_suite_identifier.expectation_suite_name
            )
            if self.name == "profiling":
                logger.debug(
                    "        Rendering profiling for batch {}".format(
                        resource_key.batch_identifier
                    )
                )
            else:
                logger.debug(
                    "        Rendering validation: run name: {}, run time: {}, suite {} for batch {}".format(
                        run_name,
                        run_time,
                        expectation_suite_name,
                        resource_key.batch_identifier,
                    )
                )

        try:
            rendered_content = self.renderer_class.render(resource)
            viewable_content = self.view_class.render(
                rendered_content,
                data_context_id=self.data_context_id,
                show_how_to_buttons=self.show_how_to_buttons,
            )
        except Exception as e:
            exception_message = f"""\
An unexpected Exception occurred during data docs rendering.  Because of this error, certain parts of data docs will \
not be rendered properly and/or may not appear altogether.  Please use the trace, included in this message, to \
diagnose and repair the underlying issue.  Detailed information follows:
                """
            exception_traceback = traceback.format_exc()
            exception_message += (
                f'{type(e).__name__}: "{str(e)}".  Traceback: "{exception_traceback}".'
            )
            logger.error(exception_message, e, exc_info=True)

        self.target_store.set(
            SiteSectionIdentifier(
                site_section_name=self.name,
                resource_identifier=resource_key,
            ),
            viewable_content,
        )


# Traceback (TypeError)
❯ great_expectations docs build

The following Data Docs sites will be built:

- local_site: file:///Users/taylor/repos/sdap/ge/great_expectations/uncommitted/data_docs/local_site/index.html

Would you like to proceed? [Y/n]:

Building Data Docs...

--- Logging error ---
Traceback (most recent call last):
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/render/renderer/site_builder.py", line 443, in build
rendered_content = self.renderer_class.render(resource)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/render/renderer/page_renderer.py", line 210, in render
page_title += " / " + data_asset_name
TypeError: can only concatenate str (not "int") to str

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/logging/__init__.py", line 1081, in emit
msg = self.format(record)
File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/logging/__init__.py", line 925, in format
return fmt.format(record)
File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/logging/__init__.py", line 664, in format
record.message = record.getMessage()
File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/logging/__init__.py", line 369, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Call stack:
File "/Users/taylor/repos/sdap/.venv/bin/great_expectations", line 8, in <module>
sys.exit(main())
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/cli/cli.py", line 73, in main
cli()
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/cli/docs.py", line 45, in docs_build
build_docs(context, site_name=site_name, view=view, assume_yes=assume_yes)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/cli/docs.py", line 146, in build_docs
index_page_locator_infos = context.build_data_docs(site_names=site_names)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/core/usage_statistics/usage_statistics.py", line 257, in usage_statistics_wrapped_method
result = func(*args, **kwargs)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/data_context/data_context.py", line 1572, in build_data_docs
index_page_resource_identifier_tuple = site_builder.build(
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/render/renderer/site_builder.py", line 290, in build
site_section_builder.build(resource_identifiers=resource_identifiers)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/render/renderer/site_builder.py", line 460, in build
logger.error(exception_message, e, exc_info=True)
Message: 'An unexpected Exception occurred during data docs rendering.  Because of this error, certain parts of data docs will not be rendered properly and/or may not appear altogether.  Please use the trace, included in this message, to diagnose and repair the underlying issue.  Detailed information follows:\n                TypeError: "can only concatenate str (not "int") to str".  Traceback: "Traceback (most recent call last):\n  File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/render/renderer/site_builder.py", line 443, in build\n    rendered_content = self.renderer_class.render(resource)\n  File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/render/renderer/page_renderer.py", line 210, in render\n    page_title += " / " + data_asset_name\nTypeError: can only concatenate str (not "int") to str\n".'
Arguments: (TypeError('can only concatenate str (not "int") to str'),)
Traceback (most recent call last):
File "/Users/taylor/repos/sdap/.venv/bin/great_expectations", line 8, in <module>
sys.exit(main())
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/cli/cli.py", line 73, in main
cli()
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/cli/docs.py", line 45, in docs_build
build_docs(context, site_name=site_name, view=view, assume_yes=assume_yes)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/cli/docs.py", line 146, in build_docs
index_page_locator_infos = context.build_data_docs(site_names=site_names)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/core/usage_statistics/usage_statistics.py", line 257, in usage_statistics_wrapped_method
result = func(*args, **kwargs)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/data_context/data_context.py", line 1572, in build_data_docs
index_page_resource_identifier_tuple = site_builder.build(
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/render/renderer/site_builder.py", line 290, in build
site_section_builder.build(resource_identifiers=resource_identifiers)
File "/Users/taylor/repos/sdap/.venv/lib/python3.8/site-packages/great_expectations/render/renderer/site_builder.py", line 466, in build
viewable_content,
UnboundLocalError: local variable 'viewable_content' referenced before assignment

# Fixed code
def build(self, resource_identifiers=None):
    source_store_keys = self.source_store.list_keys()
    if self.name == "validations" and self.validation_results_limit:
        source_store_keys = sorted(
            source_store_keys, key=lambda x: x.run_id.run_time, reverse=True
        )[: self.validation_results_limit]

    for resource_key in source_store_keys:
        # if no resource_identifiers are passed, the section
        # builder will build
        # a page for every keys in its source store.
        # if the caller did pass resource_identifiers, the section builder
        # will build pages only for the specified resources
        if resource_identifiers and resource_key not in resource_identifiers:
            continue

        if self.run_name_filter:
            if not resource_key_passes_run_name_filter(
                resource_key, self.run_name_filter
            ):
                continue
        try:
            resource = self.source_store.get(resource_key)
        except exceptions.InvalidKeyError:
            logger.warning(
                f"Object with Key: {str(resource_key)} could not be retrieved. Skipping..."
            )
            continue

        if isinstance(resource_key, ExpectationSuiteIdentifier):
            expectation_suite_name = resource_key.expectation_suite_name
            logger.debug(
                "        Rendering expectation suite {}".format(expectation_suite_name)
            )
        elif isinstance(resource_key, ValidationResultIdentifier):
            run_id = resource_key.run_id
            run_name = run_id.run_name
            run_time = run_id.run_time
            expectation_suite_name = (
                resource_key.expectation_suite_identifier.expectation_suite_name
            )
            if self.name == "profiling":
                logger.debug(
                    "        Rendering profiling for batch {}".format(
                        resource_key.batch_identifier
                    )
                )
            else:
                logger.debug(
                    "        Rendering validation: run name: {}, run time: {}, suite {} for batch {}".format(
                        run_name,
                        run_time,
                        expectation_suite_name,
                        resource_key.batch_identifier,
                    )
                )

        try:
            rendered_content = self.renderer_class.render(resource)
            viewable_content = self.view_class.render(
                rendered_content,
                data_context_id=self.data_context_id,
                show_how_to_buttons=self.show_how_to_buttons,
            )

            self.target_store.set(
                SiteSectionIdentifier(
                    site_section_name=self.name,
                    resource_identifier=resource_key,
                ),
                viewable_content,
            )
        except Exception as e:
            exception_message = f"""\
An unexpected Exception occurred during data docs rendering.  Because of this error, certain parts of data docs will \
not be rendered properly and/or may not appear altogether.  Please use the trace, included in this message, to \
diagnose and repair the underlying issue.  Detailed information follows:
                """
            exception_traceback = traceback.format_exc()
            exception_message += (
                f'{type(e).__name__}: "{str(e)}".  Traceback: "{exception_traceback}".'
            )
            logger.error(exception_message, e, exc_info=True)