Python правильно обрабатывает различные типы входных данных с помощью try / кроме парадигмы - PullRequest
0 голосов
/ 04 июня 2019

Ссылка на этот вопрос: Какой канонический способ проверки типа в Python?

Говорят, что лучший способ проверить входные данные - это не проверять их, то есть разрешить блокам try / кроме заботиться о неверных входных данных.

Мой вопрос заключается в том, что если я хочу разработать функцию, которая обрабатывает несколько входов, моя интуиция заключается в том, чтобы сделать что-то подобное

def my_function(self, input):
    if isinstance(input, type):
        ...do this
    elif isinstance(input, type2):
        ...do that
    else
        print("can only handle type and type2")
        raise TypeError

но это непитонично. Как мне это структурировать?

В моем конкретном прецеденте я хочу создать функцию, которая может обрабатывать list или pandas DataFrame, но из POV дизайна функции, как мне разработать это в попытке, кроме парадигмы? Это вроде "некрасиво", но я также еще не видел код, который делает это в python.

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Это не выглядит функционально слишком "некрасиво" , при условии, что оно не добавляет извилистого кода и доступно для чтения.

Но если у вас есть несколько проверок, вы добавите больше if с.Если вы беспокоитесь об этом, словарный подход также кажется разборчивым:

def call_integer():
    print('integer')

def call_str():
    print('str')

def my_function(input):
    val = map_dict.get(type(input).__name__, None)
    if val:
        val()
    else:
        print("can only handle type and type2")
        raise TypeError       

map_dict = {'int': call_integer, 'str': call_str}
my_function('12.7')
# str
1 голос
/ 04 июня 2019

Вот довольно простой пример использования assert для выдачи ошибки при неправильном вводе:

sentence = str(input("Please input some words: "))

assert len(sentence.split(" ")) > 1, "length of string less than 2 words"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...