2015-04-20 4 views
0

Мне нужно использовать функцию (myAPI.readArr), которая возвращает скаляр, numpy.ndarray или Py_None при сбое.Проверьте, является ли возвращаемое значение экземпляром Py_None

Это работает для отказа:

data = myAPI.readArr(arg1, arg2) 
if not data: 
    raise Exception("Problem!") 

но для действительных аргументов, которые я получаю:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Как я могу проверить, что вызов успешно или нет?

+0

PEP 8 явно рекомендует тестировать 'is None', когда вы имеете в виду' is None', отчасти потому, что многие объекты, кроме 'None', являются ложными, скажем,' False'. Тот факт, что некоторые объекты являются незаконными для проверки на предмет ложности, например массивы NumPy, просто означает, что вы получаете раннее сообщение об ошибке для своей ошибки, а не код, который, кажется, работает до тех пор, пока вы его не разворачиваете, и он бесшумно закручивает ваши данные. :) – abarnert

+0

Я думаю, что [это] (http://stackoverflow.com/questions/14247373/python-none-comparison-should-i-use-is-or) - это канонический ответ, но связанный кажется более прямым ответьте на вопрос ОП. – abarnert

ответ

3
data = myAPI.readArr(arg1, arg2) 
if data is None: 
    raise Exception("Problem!") 

This answer содержит более подробную информацию о сравнении с None

3
if data is None: 
    raise Exception("Problem!") 

is None Тестирование лучше, потому что она возвращает True тогда и только тогда, когда значение None, нет, если он имеет значение ноль.

Смежные вопросы