str.isprintable()

str.isprintable()
Returns: bool · Added in v3.x · Updated March 13, 2026 · String Methods
strings validation printable

The isprintable() method checks whether all characters in a string are printable—that is, the string would look the same on screen as it does in code. This method is useful for detecting strings that contain control characters, escape sequences, or other non-printable elements that might cause issues when writing to files or displaying to users.

Strings containing only printable ASCII characters, Unicode letters, digits, punctuation, and whitespace return True. Strings with control characters like newline (\n), tab (\t), carriage return (\r), or null (\x00) return False.

Syntax

str.isprintable()

This method takes no parameters.

Examples

Basic usage with printable characters

text = "Hello, World!"
print(text.isprintable())
# True

numbers = "12345"
print(numbers.isprintable())
# True

with_spaces = "Hello World"
print(with_spaces.isprintable())
# True

punctuation = "Hello! How are you?"
print(punctuation.isprintable())
# True

Detecting non-printable characters

# Newline is not printable
with_newline = "Hello\nWorld"
print(with_newline.isprintable())
# False

# Tab is not printable
with_tab = "Hello\tWorld"
print(with_tab.isprintable())
# False

# Carriage return is not printable
with_cr = "Hello\rWorld"
print(with_cr.isprintable())
# False

# Empty string is printable
empty = ""
print(empty.isprintable())
# True

Unicode

# Most Unicode characters are printable
unicode_text = "Helloαβγ"
print(unicode_text.isprintable())
# True

chinese = "你好世界"
print(chinese.isprintable())
# True

emoji = "Hello👋"
print(emoji.isprintable())
# True

Common Patterns

Validating safe output

def can_print_safely(text):
    """Check if text can be displayed without issues."""
    return text.isprintable()

user_input = "Hello\nWorld"
if can_print_safely(user_input):
    print(f"Output: {user_input}")
else:
    print("Error: contains non-printable characters")
# Error: contains non-printable characters

Cleaning strings for file output

def make_printable(text):
    """Remove non-printable characters from a string."""
    return ''.join(c for c in text if c.isprintable())

dirty = "Hello\x00World\x1f!"
clean = make_printable(dirty)
print(repr(clean))
# 'HelloWorld!'

Checking log messages

def validate_log_message(message):
    """Log messages should only contain printable characters."""
    if not message.isprintable():
        raise ValueError("Log message contains non-printable characters")
    return True

try:
    validate_log_message("User logged in")
    # True
    validate_log_message("Error:\nDetails here")
    # Raises ValueError
except ValueError as e:
    print(e)

Filtering a list of strings

messages = [
    "System started",
    "User: admin\nStatus: active",
    "Processing...",
    "Warning:\tCheck logs",
    "Complete"
]

printable_messages = [m for m in messages if m.isprintable()]
for msg in printable_messages:
    print(msg)
# System started
# Processing...
# Complete

Behavior Notes

  • Returns True for empty strings
  • Control characters (ASCII 0-31 and 127) are not printable
  • The space character ( ) is printable
  • Most Unicode characters are considered printable, including emoji

Difference from other validation methods

# isprintable vs isspace
# isspace returns True ONLY for whitespace characters
whitespace = "   "
print(whitespace.isspace())
# True
print(whitespace.isprintable())
# True

# isprintable vs isascii
# isascii returns True for ASCII characters (0-127)
ascii_text = "Hello"
print(ascii_text.isascii())
# True
print(ascii_text.isprintable())
# True

# Non-ASCII printable characters
unicode_text = "Héllo"
print(unicode_text.isascii())
# False
print(unicode_text.isprintable())
# True

See Also