This rule raises an issue when the ``++__all__++`` property of a module contains objects that aren't strings. == Why is this an issue? The ``++__all__++`` property of a module is used to define the list of names that will be imported when performing a wildcard import of this module, i.e. when ``++from mymodule import *++`` is used. In the following example: [source,python] ---- # mymodule.py def foo(): ... def bar(): ... __all__ = ["foo"] ---- Executing ``++from mymodule import *++`` from a different module will only import `foo`. This list can only contain strings. If something other than a string is listed, a `TypeError` will be raised when trying to perform a wildcard import of the module. To fix this issue, make sure that all properties listed in ``++__all__++`` are strings. === Code examples ==== Noncompliant code example [source,python, diff-id=1,diff-type=noncompliant] ---- class MyClass: pass __all__ = [ MyClass # Noncompliant: wildcard import will raise a TypeError ] ---- ==== Compliant solution [source,python,diff-id=1,diff-type=compliant] ---- class MyClass: pass __all__ = [ "MyClass" ] ---- == Resources === Documentation * https://docs.python.org/3/tutorial/modules.html#importing-from-a-package[Python documentation - Importing * From a Package] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Replace this symbol with a string; "__all__" can only contain strings. === Highlighting Primary: the wrong symbol in "__all__" ''' == Comments And Links (visible only on this page) === is related to: S5807 endif::env-github,rspecator-view[]