✋ Update: This post was originally published on my blog decodingweb.dev, where you can read the latest version for a 💯 user experience. ~reza
The Python error “TypeError: can only concatenate str (not “bool”) to str” occurs if you concatenate a string with a boolean value (True
or False
).
Here’s what the error looks like on Python 3:
Traceback (most recent call last):
File "/dwd/sandbox/test.py", line 3, in
print('Not everything is ' + not_everything)
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
TypeError: can only concatenate str (not "bool") to str
Why does it happen?
Python as a Strongly-typed programming language doesn't allow some operations on specific data types. For instance, you can't add 2
to False
(because it makes no sense!) - depending on the operation, the error messages might vary.
Now, if you try to concatenate a string literal with a boolean value, you'll get the "TypeError: can only concatenate str (not "bool") to str".
The following code tries to concatenate the string 'Not everything is '
with a boolean value (True
)
# ⛔ Raises TypeError: can only concatenate str (not bool) to str
not_everything = True
print('Not everything is ' + not_everything)
## How to fix TypeError: can only concatenate str (not "bool") to str
If you need to use the +
operator, ensure the operands on either side are strings. Remember: birds of a feather flock together 🦜 + 🦜.
A quick fix would be converting the boolean value to a string value with the str()
function.
But if you want to insert several boolean values into a string, you'll have several options:
- Use an f-string
- Use printf-style formatting
- Use
print()
with multiple arguments - ideal for debugging - Use the
str()
function
Let's explore each method with examples.
Use an f-string: Formatted string literals (a.k.a f-strings) are a robust way of inserting boolean values into string literals. You create an f-string by prefixing it with f
or F
and writing expressions inside curly braces ({}
):
not_everything = True
print(f'Not everything is {not_everything}')
# output: Not everything is True
Use printf-style formatting: However, if you prefer to use the old-fashioned string formatting (string %
values), you can do it like so:
not_everything = True
print('Not everything is %s' % not_everything)
# output: Not everything is True
When using the old-style formatting, ensure the format string is valid. Otherwise, you'll get another type error: not all arguments converted during string formatting.
Use print()
with multiple arguments - ideal for debugging: If you're concatenating a string with a boolean and readability isn't a concern, you can pass the string and the boolean value(s) as separate arguments to the print()
function.
All the positional arguments passed to the print()
function are automatically converted to strings - like how str()
works.
not_everything = True
print('Not everything is', not_everything)
# output: Not everything is True
The print()
function outputs the arguments separated by a space. You can change the separator via the sep
keyword argument.
Use the str()
function: If you need to generate the string without printing it, use the str()
function to convert the boolean value to a string value:
not_everything = True
output = 'Not everything is ' + str(not_everything)
print(output)
# output: Not everything is True
Alright, I think that does it! I hope this quick guide helped you fix your problem.
Thanks for reading!
❤️ You might like:
Top comments (0)