Некоторые методы Python работают с различными источниками ввода. Например, метод дерева элементов XML parse
принимает объект, который может быть либо строкой (в этом случае API обрабатывает его как имя файла), либо объектом, поддерживающим интерфейс ввода-вывода, например объектом файла или * 1002. *.
Итак, очевидно, что метод parse
выполняет какое-то прослушивание интерфейса, чтобы выяснить, какие действия предпринять. Я предполагаю, что самый простой способ добиться этого - проверить, является ли входной параметр строкой, говоря «1006», и, если это так, трактовать его как имя файла, иначе обработать его как объект ввода-вывода.
Но для лучшей проверки ошибок, я думаю, было бы лучше проверить, поддерживает ли x интерфейс IO. Каков стандартный идиоматический способ проверки, поддерживает ли объект указанный интерфейс?
Один из способов, я полагаю, был бы просто сказать:
if "read" in x.__class__.__dict__: # check if object has a read method
Но то, что x
имеет метод «чтения», не обязательно означает, что он поддерживает интерфейс ввода-вывода, поэтому я предполагаю, что мне следует также проверить все методы интерфейса ввода-вывода. Это обычно лучший способ сделать это? Или я должен просто забыть о проверке интерфейса и просто позволить обработать AttributeError
дальше по стеку?