Булева операция булевой переменной над символом дает TypeError
, но в обратном случае проблем нет:
>>> from sympy import *
>>> x = Symbol('x', bool=True)
>>> x ^ True
Not(x)
>>> True ^ x
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
True ^ x
TypeError: unsupported operand type(s) for ^: 'bool' and 'Symbol'
Я могу попробовать поймать:
try :
print True ^ x
except TypeError:
print x ^ True
Not(x)
Но для моей текущей задачи это невозможно реализовать с помощью try-except
, так как мне приходится иметь дело с ~200 символами. Как я могу этого добиться?
numpy.array
,S
, с произвольно смешанными символами и логическими значениями. У меня есть такие операции, как:S[15] ^ (S[19] & S[72]) ^ S[112]
. Теперь, не зная, какой из них является логическим, а какой символьным, я не могу выполнять операции try-except, поскольку количество таких блоков try-except будет расти в геометрической прогрессии. - person hola   schedule 31.10.2013[(15, 19, 73, 112), ...]
это не сработает, если это не всегда одни и те же операции. Вы также можете использовать список выражений['S[15] ^ (S[19] & S[72]) ^ S[112]', ...]
иeval
их внутри try-except. Я бы не стал этого делать, если бы у меня не было другого решения. - person ThinkChaos   schedule 31.10.2013