Home >Backend Development >Python Tutorial >Why Does Redefining the Built-in `str` Function Lead to a TypeError in String Conversion?

Why Does Redefining the Built-in `str` Function Lead to a TypeError in String Conversion?

DDD
DDDOriginal
2024-12-15 17:31:14876browse

Why Does Redefining the Built-in `str` Function Lead to a TypeError in String Conversion?

Redefining Built-ins Leads to TypeError in String Conversion

This explains why code assigning to str within a function triggers a TypeError on subsequent calls to that function, unlike initial attempts. The following code snippet demonstrates the issue:

def example(parameter):
    global str  # Declares str as a global variable
    str = str(parameter)  # Redefines str as a string
    print(str)

example(1)  # First call: successful string conversion
example(2)  # Second call: raises a TypeError

Root Cause and Resolution

The global statement in the snippet essentially redefines str, which is a built-in type representing strings. Assigning a new value to str() overrides its default functionality as a function for converting objects to strings.

To resolve this issue, use a different name for the local variable within the function and remove the global statement. For example:

def example(parameter):
    local_str = str(parameter)  # Local variable with a different name
    print(local_str)

example(1)  # First call: successful string conversion
example(2)  # Second call: successful string conversion

Interactive Python Shell Implications

If you encounter this issue in an interactive shell, assigning to the global str() persists unless explicitly addressed. One method to resolve this is to restart the interpreter. Alternatively, you can manually remove the assignment using:

del str

Remember that str is not a defined global variable by default; it is typically found in the builtins module that gets imported upon Python startup.

The above is the detailed content of Why Does Redefining the Built-in `str` Function Lead to a TypeError in String Conversion?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn