The asterix operator in '*strs' unpacks the iterms in 'strs', which is a series of three strings. Your code ran into trouble when it tried to send those strings to the type() command, where type() was initialized by its __ new__() magic method.
type() has two forms:
1.) type(object) where the 'object' is an instance of some class.
2.) type(name, bases, dictionary) where 'bases' is a tuple that itemizes base classes, and a dictionary that contains definitions of base classes.
In your code, the use of the unpacking operation, *strs, resulted in type() being sent three arguments, so it was expecting a name, a tuple, and a dictionary. What it, and then __ new()__ got was three strings: A name (it received 'flower'), then another string, "flood", where it wanted a tuple. Here python threw the error and never made it to the third string, 'flight'.
We can duplicate the error with:
print(type("a","b","c"))
We can also see that either one or three (but not two) arguments were expected, with:
print(type("a","b"))
while the following command works just fine:
print(type("a"))
If you want to see the type of each member of *strs, first let it unpack to a list, then iterate through that list, printing the type of each member as you go.
mylist = [*strs]
for elm in mylist:
print(type(elm))
Does this answer the question of what caused that behavior and the error?