FloatProperty seen as a tuple when adding hard_min or hard_max
If you have a look at the FloatProperty documentation you will notice there is NO hard_min/hard_max parameters.  Suggest using min and max instead.

As an example we'll add some undefined grombo parameter to a FloatProperty

    threshold = bpy.props.FloatProperty(
        name = "Threshold",
        description = "Threshold",
        soft_min = 0.00001,
        soft_max = 0.1,
        grombo = 99,
        #hard_min = 0.0001,
        #hard_max = 10,
        step = 0.01,
        precision = 5,
        default = 0.001
    )

    def execute(self, context):

        print(self.threshold)
        t2 = self.threshold * self.threshold
        print(t2)
        return {'FINISHED'}


and run the operator in the py console

&gt;&gt;&gt; bpy.ops.object.my_operator()
(&lt;built-in function FloatProperty&gt;, {'soft_max': 0.1, 'precision': 5, 'step': 0.01, 'default': 0.001, 'grombo': 99, 'description': 'Threshold', 'soft_min': 1e-05, 'name': 'Threshold', 'attr': 'threshold'})
Error: Traceback (most recent call last):
  File "/home/batfinger/3DModels/Tests/movebones.blend/Text.001", line 25, in execute
TypeError: can't multiply sequence by non-int of type 'tuple'


ie, if there is an undefined parameter, then the value returned is a (function, {parameters}) tuple, hence the rather cryptic error.