pylint-dev / astroid

A common base representation of python source code for pylint and other projects
https://pylint.readthedocs.io/projects/astroid/en/latest/
GNU Lesser General Public License v2.1
532 stars 276 forks source link

Inference of JoinedStr is inconsistent #2621

Closed ericvergnaud closed 5 days ago

ericvergnaud commented 1 month ago

Inference of JoinedStr is inconsistent. For example:

f"{unknown}" raises an InferenceError if unknown is not declared f"{unknown}" returns Uninferable (the instance) if unknown is declared f"a/{unknown}/b" raises an InferenceError if unknown is not declared f"a/{unknown}/b" returns "a/Uninferable/b" if unknown is declared

This pushes to the user a lot of unwanted responsibility

Additionally, there are usage scenarios where the user would rather have a composite string (such as the latter case above) than the Uninferable instance.

jacobtylerwalls commented 1 month ago

Thanks for catching that we're not catching exceptions thrown by _infer() inside infer_from_values().

But re: the inconsistencies between raising and returning a partial string seem like something we should resolve in favor of not using partial strings, based on the decision we took in #2459.