Я могу воспроизвести вашу ошибку с помощью:
In [144]: type(b'123')
Out[144]: bytes
In [145]: type(np.int64(3))
Out[145]: numpy.int64
In [146]: b'123'-np.int64(3)
---------------------------------------------------------------------------
UFuncTypeError Traceback (most recent call last)
<ipython-input-146-bd8d8c3ec2cd> in <module>
----> 1 b'123'-np.int64(3)
UFuncTypeError: ufunc 'subtract' did not contain a loop with signature matching types (dtype('S21'), dtype('S21')) -> dtype('S21')
Переменная np.int64
взяла 'control' и преобразовала bytes
в массив, где bytestring
dtype является общим dtype.
Если вместо mapper[hash]
будет получено число Python, мы получим ошибку типа:
In [147]: b'123'-3
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-147-04d1219bd464> in <module>
----> 1 b'123'-3
TypeError: unsupported operand type(s) for -: 'bytes' and 'int'
A bytes
объект не поддерживает вычитание. Только * и +:
In [149]: b'123'*3
Out[149]: b'123123123'
Преобразование bytes
в число может решить вашу проблему:
In [150]: int(b'123')-np.int64(3)
Out[150]: 120