
On Thu, Oct 17, 2019 at 02:08:56PM +0200, Anders Hovmöller wrote:
Well obviously never with literals. But most cases of multiplication aren't with literals. So how can you get a type error when doing
a*b
is the real question.
Actually, the real question is, why are you using such clearly unsuitable and non-descriptive variable names and blaming the confusion caused by poor names on the syntax? Borrowing from the PEP, how would you get a type-error from these? width + margin prefix + word If you did, the cause would clearly be a bug in your code, not the fault of the syntax. In my experience, the most common use for the repetition operator in strings involves a single, literal, character: dashes = '-'*count
And the answer is now obvious: any time the programmer thinks a and b are numbers but they are not.
And this is a fault of the syntax, how? If repetition was spelled: a.repeat(b) and the programmer thought a was a string, when it was actually a float, and thought b was an int, but it was actually None, would you conclude that "method calls are a mistake" because they cause type errors? I'm sure you would agree with me that this is a bogus argument. Type errors are a sign of a bug in the code regardless of the spelling: you think a value has a different type than it actually has't. If it is a bogus argument for method calls, it is a bogus argument for operators.
That's a logical type error that now propagates and it's very hard to track down the offending line when you eventually end up with a crash in a different module because
And that's an argument against any form of type polymorphism. I expected a list, but got a string, and len(a) didn't raise TypeError therefore "functions are a mistake". -- Steven