Если вы используете его локально и хотите выполнить код:
python -m pdb script.py
Идея не иметь разных типов - сделать ваши функции более удобными в использовании. Если вызывающий абонент должен проверить тип возврата, он становится излишне сложным, трудно читаемым и подверженным ошибкам. Хуже того: вызывающий может вообще не делать чек, а затем попадает на врасплох. Вы показываете хороший пример: возврат списка или скалярное значение. Если вы сделаете так, как показано, вызывающий должен написать что-то вроде
res = multi_value(x)
try:
for i in res:
do_something_with_res(i)
except TypeError:
do_something_with_res(res)
Учитывая, что ваша функция действительно ничего не бросает, все это рухнет до
for i in multi_value(x)
do_something_with_res(i)
, если вы вернетесь к одному (или нет) также в виде списков. Преимущество должно быть очевидным. Вы можете подумать, что вы пользуетесь услугой звонящего, но это просто не так.
Некоторые замечания к связанной статье: я думаю, что они дали неоптимальный пример по этому вопросу. В этом примере речь идет о возврате кода ошибки vs для создания исключений, что немного отличается.