Поднимите ошибку в троичной инструкции в python, не используя классический синтаксис if / else - PullRequest
0 голосов
/ 22 февраля 2019

Возможно ли в Python напрямую вызвать ошибку в троичной инструкции?

Как в:

import numpy as np
y = np.random.rand(200, 5, 5)

y = (y[:, None] if y.ndim == 1 
    else y if y.ndim == 2 
    else raise ValueError('`y` must be given as a 1D or 2D array.'))

Конечно, это можно сделатьс простым оператором if / elif / else.Поэтому я специально спрашиваю о решении, использующем «однострочный» троичный оператор.

Просто для пояснения:
Я знаю, что троичные операторы не предназначены для возникновения ошибок и что это не хороший стиль согласно PEP8 и т. д. Я просто спрашиваю , возможно ли это вообще .

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Простой простой технический ответ: НЕТ, это невозможно - как вы, вероятно, выяснили сами, он выдает SyntaxtError (raise является оператором, а троичный оператор поддерживает только выражения).

0 голосов
/ 22 февраля 2019

Вы можете использовать простую вспомогательную функцию:

>>> def my_raise(ex): raise ex

>>> x = 1 if False else my_raise(ValueError('...'))
ValueError: ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...