any and every case of using foo=notNone and also using bar=notNone needs to raise this exception. if only one of them is used then this conflict is avoided but it could instead have a genuine TypeError or ValueError if the one value passed is a bad type or bad value. it is not essential to have 3 different kinds of exceptions. the function will be explicitly testing for these.
Tradition is peer pressure from dead people
What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.