Проверьте неизвестный тип аргумента - PullRequest
0 голосов
/ 18 апреля 2020

Я передаю аргумент (допустим, переменную 'a') функции, и эта переменная может быть равна None или быть np.array.

# Option 1
a = None

# Option 2
a = np.array(range(0,10))

В зависимости от того, что равно Я хочу делать разные вещи.

Это то, что я сделал:

if a == None:
     do this
else:
     do that

Проблема в том, что np.array не может равняться None, и я получаю следующее сообщение: " ValueError: Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all () "

Однако, если я использую a.any () или a.all ( ) и a = None, появляется другая ошибка, потому что None не имеет атрибута 'any' или 'all'.

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

I попробовал следующее, но кажется, что должен быть лучший способ, чем дублирование кода, или я ошибаюсь?

try:
     if a == None:
          do this
     else:
          do that
except:
     if a.any() == None:
          do this
     else:
          do that

Ответы [ 2 ]

1 голос
/ 18 апреля 2020
if isinstance(a, np.ndarray):
    ...
else:
    ...

или

if type(a) is np.ndarray:
    ...
else:
    ...

или

if a is None:
    ...
else:
    ...

Все они будут работать.

1 голос
/ 18 апреля 2020

Используйте is вместо ==:

if a is None:
     do this
else:
     do that
...