# Buggy code
def _compute_package_id(
    self, node, default_package_id_mode, default_python_requires_id_mode
):
    """
    Compute the binary package ID of this node
    :param node: the node to compute the package-ID
    :param default_package_id_mode: configuration of the package-ID mode
    """
    # TODO Conan 2.0. To separate the propagation of the graph (options) of the package-ID
    # A bit risky to be done now
    conanfile = node.conanfile
    neighbors = node.neighbors()
    if not self._fixed_package_id:
        direct_reqs = []  # of PackageReference
        indirect_reqs = set()  # of PackageReference, avoid duplicates
        for neighbor in neighbors:
            ref, nconan = neighbor.ref, neighbor.conanfile
            direct_reqs.append(neighbor.pref)
            indirect_reqs.update(nconan.info.requires.refs())
        # Make sure not duplicated
        indirect_reqs.difference_update(direct_reqs)
    else:
        node.id_direct_prefs = set()  # of PackageReference
        node.id_indirect_prefs = set()  # of PackageReference, avoid duplicates
        for neighbor in neighbors:
            node.id_direct_prefs.add(neighbor.pref)
            node.id_indirect_prefs.update(neighbor.id_direct_prefs)
            node.id_indirect_prefs.update(neighbor.id_indirect_prefs)
        # Make sure not duplicated, totally necessary
        node.id_indirect_prefs.difference_update(node.id_direct_prefs)
        direct_reqs = node.id_direct_prefs
        indirect_reqs = node.id_indirect_prefs

    python_requires = getattr(conanfile, "python_requires", None)
    if python_requires:
        if isinstance(python_requires, dict):
            python_requires = None  # Legacy python-requires do not change package-ID
        else:
            python_requires = python_requires.all_refs()
    conanfile.info = ConanInfo.create(
        conanfile.settings.values,
        conanfile.options.values,
        direct_reqs,
        indirect_reqs,
        default_package_id_mode=default_package_id_mode,
        python_requires=python_requires,
        default_python_requires_id_mode=default_python_requires_id_mode,
    )

    # Once we are done, call package_id() to narrow and change possible values
    with conanfile_exception_formatter(str(conanfile), "package_id"):
        with conan_v2_property(
            conanfile,
            "cpp_info",
            "'self.cpp_info' access in package_id() method is deprecated",
        ):
            conanfile.package_id()

    info = conanfile.info
    node.package_id = info.package_id()


# Traceback (TypeError)
30-Apr-2020 16:37:19 xyz/abc: Unknown binary for xyz/abc, computing updated ID
30-Apr-2020 16:37:19 Traceback (most recent call last):
30-Apr-2020 16:37:19 File "conan/conans/client/command.py", line 2002, in run
30-Apr-2020 16:37:19 File "conan/conans/client/command.py", line 369, in create
30-Apr-2020 16:37:19 File "conan/conans/client/conan_api.py", line 89, in wrapper
30-Apr-2020 16:37:19 File "conan/conans/client/conan_api.py", line 368, in create
30-Apr-2020 16:37:19 File "conan/conans/client/cmd/create.py", line 57, in create
30-Apr-2020 16:37:19 File "conan/conans/client/manager.py", line 75, in deps_install
30-Apr-2020 16:37:19 File "conan/conans/client/installer.py", line 309, in install
30-Apr-2020 16:37:19 File "conan/conans/client/installer.py", line 404, in _build
30-Apr-2020 16:37:19 File "conan/conans/client/graph/graph_binaries.py", line 347, in reevaluate_node
30-Apr-2020 16:37:19 File "conan/conans/client/graph/graph_binaries.py", line 319, in _compute_package_id
30-Apr-2020 16:37:19 File "conan/conans/model/info.py", line 540, in package_id
30-Apr-2020 16:37:19 File "conan/conans/model/info.py", line 216, in sha
30-Apr-2020 16:37:19 TypeError: '<' not supported between instances of 'NoneType' and 'str'

# Fixed code
def _compute_package_id(
    self, node, default_package_id_mode, default_python_requires_id_mode
):
    """
    Compute the binary package ID of this node
    :param node: the node to compute the package-ID
    :param default_package_id_mode: configuration of the package-ID mode
    """
    # TODO Conan 2.0. To separate the propagation of the graph (options) of the package-ID
    # A bit risky to be done now
    conanfile = node.conanfile
    neighbors = node.neighbors()
    if not self._fixed_package_id:
        direct_reqs = []  # of PackageReference
        indirect_reqs = set()  # of PackageReference, avoid duplicates
        for neighbor in neighbors:
            ref, nconan = neighbor.ref, neighbor.conanfile
            direct_reqs.append(neighbor.pref)
            indirect_reqs.update(nconan.info.requires.refs())
        # Make sure not duplicated
        indirect_reqs.difference_update(direct_reqs)
    else:
        direct_reqs, indirect_reqs = self.package_id_transitive_reqs(node)

    python_requires = getattr(conanfile, "python_requires", None)
    if python_requires:
        if isinstance(python_requires, dict):
            python_requires = None  # Legacy python-requires do not change package-ID
        else:
            python_requires = python_requires.all_refs()
    conanfile.info = ConanInfo.create(
        conanfile.settings.values,
        conanfile.options.values,
        direct_reqs,
        indirect_reqs,
        default_package_id_mode=default_package_id_mode,
        python_requires=python_requires,
        default_python_requires_id_mode=default_python_requires_id_mode,
    )

    # Once we are done, call package_id() to narrow and change possible values
    with conanfile_exception_formatter(str(conanfile), "package_id"):
        with conan_v2_property(
            conanfile,
            "cpp_info",
            "'self.cpp_info' access in package_id() method is deprecated",
        ):
            conanfile.package_id()

    info = conanfile.info
    node.package_id = info.package_id()