How to Solve startswith first arg must be str or a tuple of str, not [bool-list-int]

How to Solve startswith first arg must be str or a tuple of str, not [bool-list-int]

The TypeError error is raised when we pass an incompatible object for an operation.

For example:

print(True + 11)

Here, we will get TypeError because we cannot concatenate a bool with a number. And the same thing happens when we pass an incompatible object for the startswith() function.

However, in this tutorial, we will cover the reasons for TypeError: startswith first arg must be str or a tuple of str, not (bool/list/int) and how to solve it.

What are the reasons for 'startswith first arg must be str or a tuple of str'?

If we read the TypeError: startswith first arg must be str or a tuple of str, not (bool/list/int) error carefully, we will see that startswith accepts either string or tuple of string in the first argument. Therefore, when we pass something else, we will get the error.

For example:

# Passing Bool
"my string".startswith(True)
#TypeError: startswith first arg must be str or a tuple of str, not bool


# Passing List
"my string".startswith(['python', 'hello', 'go'])
#TypeError: startswith first arg must be str or a tuple of str, not list


# Passing Integer
"my string".startswith(1)
#TypeError: startswith first arg must be str or a tuple of str, not int

Next, we will see the solutions of each of the examples above.

How to solve 'startswith first arg must be str or a tuple of str'

To solve the error, let us see the solutions of the previous examples.

1. Passing Bool

Example:

# Passing Bool
"my string".startswith(True)
#TypeError: startswith first arg must be str or a tuple of str, not bool

In this situation, we need to convert the bool type to string by using the [single/double] quote or the str() function.

Double quote:

my_string = "Hello Error"
print(my_string.startswith("True"))

Output:

False

str():

my_string = "Hello Error"
print(my_string.startswith(str(True)))

Output:

False

2. Passing List

# Passing List
"my string".startswith(['python', 'hello', 'go'])
#TypeError: startswith first arg must be str or a tuple of str, not list

Here, we have two solutions:

  • Convert the list to a tuple
  • Use the any() function

Convert the list to a tuple:

my_string = "Hello Error"
prefixes = ['python', 'Hello', 'go']
print(my_string.startswith(tuple(prefixes)))

Output:

True

The tuple() function converts a list to a tuple.


Use any():

my_string = "Hello Error"
prefixes = ['python', 'Hello', 'go']
print(any(my_string.startswith(p) for p in prefixes))

Output:

True

Click Here for more information about Check if String Starts with list of prefixes.

3. Passing Integer

# Passing Integer
"my string".startswith(1)
#TypeError: startswith first arg must be str or a tuple of str, not int

To solve int type error, we will do like the bool example.

Double quote:

my_string = "Hello Error"
print(my_string.startswith("1"))

Output:

False

str():

my_string = "Hello Error"
print(my_string.startswith(str(1)))

Output:

False

Conclusion

Here we have learned the solutions for 'startswith first arg must be str or a tuple of str, not [bool-list-int]'.

In general, when we face TypeError, the first thing we have to think about is the type of object.

We hope this tutorial helps you to solve the problem.