旗木稻草 发表于 2021-8-5 15:40:35

【小白求助】decimal模块中的信号问题

本帖最后由 旗木稻草 于 2021-8-6 09:34 编辑

小甲鱼在decimal模块的快速入门教程中,有关信号的内容如下,没有太理解,请教大家。
第一个问题:
下面的为什么会抛出异常?
如果 FloatOperation 信号被捕获,构造函数中的小数和浮点数的意外混合或排序比较引发异常:
>>> c = getcontext()
>>> c.traps = True
>>> Decimal(3.14)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
decimal.FloatOperation: [<class 'decimal.FloatOperation'>]
>>> Decimal('3.5') < 3.7
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
decimal.FloatOperation: [<class 'decimal.FloatOperation'>]
>>> Decimal('3.5') == 3.5
True
第二个问题:
上下文里面的参数是什么意思?
>>> from decimal import *
>>> getcontext()
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
      capitals=1, clamp=0, flags=[], traps=[Overflow, DivisionByZero,
      InvalidOperation])

dragon_xiao 发表于 2021-8-5 15:40:36

看了下官方文档,第一个问题,应该是和python版本有关, 在 3.2 版更改: 现在允许构造函数的参数为 float 实例。

在 3.3 版更改: float 参数在设置 FloatOperation 陷阱时引发异常。 默认情况下,陷阱已关闭。 如果c.traps = True 则是代表开启陷阱,后面就一直会报错 吧~~

第二个问题,
上下文里面的参数是什么意思?
>>> from decimal import *   # 调用decimal 模块
>>> getcontext()                # 捕获当前的参数信息
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
      capitals=1, clamp=0, flags=[], traps=[Overflow, DivisionByZero,
      InvalidOperation])       # 参数值的内容
根据你自己程序里的上下文需要的参数精度, 比如你现在要造火箭,需要精确到15位 prec = 15 , 自己根据需求来修改参数,再比如,只用计算家具的体积或者面积,精确到3位就够了。prec = 3 参数根据需要自己设置。
页: [1]
查看完整版本: 【小白求助】decimal模块中的信号问题