0
0 комментариев

Частенько в стандартной библиотеке встречаются функции или методы, выбрасывающие такое исключение, если предоставить им именованный аргумент. Пару примеров:

d = {"yo": "value"}
 
print(d.get("key", default="DEFAULT_VALUE"))
 
import datetime
fmt = "%d-%m-%y"
 
print(datetime.datetime.strptime("23-08-2016", format=fmt))

Известно, как эту проблему решить — не предоставлять именованных аргументов. Однако, не совсем понятно откуда растут ноги у этой проблемы, потому что с обыкновенными функциями, очевидно, все в порядке:

def ordinary_func(operand1, operand2):
    return operand1 * operand2
 
print(ordinary_func(operand1=5, operand2=8))

Есть предположение, что какие-то функции и методы вызывают напрямую функции на C, но этот факт не проясняет вопроса. К тому же в этом случае все функции по этому критерию будут разделены на 2 части — которым можно предоставить именованные аргументы (написанные на чистом Python) и которым нельзя (написанные на C). Это странный и печальный факт, ибо мне надо держать в голове, кому можно предоставлять именованный аргумент, а кому нельзя и нет гарантии, что однажды такое исключение не будет правильно обработано. Да и выходом тогда может стать не использовать именованные аргументы вообще, чтобы не ходить по минному полю.

Изменен статус публикации
Добавить комментарий