How to fix "can only concatenate str (not “bool”) to str" in Python
Tags: python, programming
Published: 2023-02-03 17:02:49

> ✋ **Update:** This post was originally published on my blog [decodingweb.dev](https://www.decodingweb.dev), where you can read the [latest version](https://www.decodingweb.dev/python-typeerror-can-only-concatenate-str-not-bool-to-str-fix) 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](https://www.decodingweb.dev/how-to-learn-a-programming-language#type-systems) 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`)


```python
# ⛔ 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 (`{}`):

```python
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:

```python
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](https://www.decodingweb.dev/python-typeerror-not-all-arguments-converted-during-string-formatting-fix).

**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.

```python
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:

```python
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:**

- [TypeError: can only concatenate str (not "dict") to str (Fixed)](https://www.decodingweb.dev/python-typeerror-can-only-concatenate-str-not-dict-to-str-fix)
- [TypeError: can only concatenate str (not "list") to str (Fixed)](https://www.decodingweb.dev/python-typeerror-can-only-concatenate-str-not-list-to-str-fix)
- [Not all arguments converted during string formatting error in Python (Fixed)](https://www.decodingweb.dev/python-typeerror-not-all-arguments-converted-during-string-formatting-fix)
- [How to fix the "TypeError: unhashable type: 'dict'" error in Python](https://www.decodingweb.dev/python-typeerror-unhashable-type-dict-fixed)