我可以確認Python 3.3的行爲。它以某種方式檢測到你通過了None
作爲上下文,並且它不喜歡它(即使它被記錄爲默認值)。
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import decimal
>>> decimal.Decimal('3', None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: optional argument must be a context
>>> decimal.Decimal('3')
Decimal('3')
更新:但它與3.2.3
Python 3.2.3 (default, Apr 11 2012, 07:12:16) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import decimal
>>> decimal.Decimal('3', None)
Decimal('3')
>>>
更新工作:之所以可以在文檔中找到...
What’s New In Python 3.3說:
十進制
問題7652 - 整合快速原生十進制算術。 由Stefan Krah編寫的C模塊和libmpdec。
當比較decimal.py
文件,它們可能看起來是一樣的在第一,但Python的3.3版本包含以下代碼幾乎在最後:
try:
import _decimal
except ImportError:
pass
else:
s1 = set(dir())
s2 = set(dir(_decimal))
for name in s1 - s2:
del globals()[name]
del s1, s2, name
from _decimal import *
...而老的Python 3.2呢不。它說,如果可以導入二進制_decimal
實現,則忽略來自decimal.py
的較早實現。而二進制模塊不能使用Python代碼調試器進行調試。
問題是觀察到的行爲是否應該被視爲錯誤。
對於它的價值,我無法在Python 3.2.3下重現這一點:'import decimal; decimal.Decimal(「3」,None)'成功返回'Decimal('3')'。 –
[這是一個bug](http://bugs.python.org/issue15783) – SilentGhost
@SilentGhost:我在鏈接中看到,它是模塊c加速器版本中的一個錯誤(無論這是什麼)。這可以解釋爲什麼我從pdb中得不到任何東西。但是,我可以指定我想要純粹的Python版本嗎? –