Potrafię potwierdzić zachowanie Pythona 3.3. W jakiś sposób wykrywa, że przekazałeś None
jako kontekst i to się nie podoba (nawet jeśli jest to udokumentowane jako wartość domyślna).
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')
Aktualizacja: ale działa z 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')
>>>
Aktualizacja: Powodem można znaleźć w dok ...
What’s New In Python 3.3 mówi:
dziesiętna
wydanie 7652 - zintegruj szybką natywną arytmetykę dziesiętną. Moduł C i libmpdec napisane przez Stefana Kraha.
Porównując decimal.py
pliki, mogą one wyglądać tak samo na początku, ale wersja Pythona 3.3 zawiera następujący kod niemal na końcu:
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 *
... natomiast starsze Python 3.2 robi nie. Mówi, że jeśli implementacja binarna może zostać zaimportowana, starsza implementacja z decimal.py
jest ignorowana. I nie można debugować modułu binarnego za pomocą debuggera kodu Python.
Pytanie brzmi, czy zaobserwowane zachowanie nie powinno być uważane za błąd.
Co jest warte, nie mogę tego odtworzyć w Pythonie 3.2.3: 'import dziesiętny; decimal.Decimal ("3", None) 'z powodzeniem zwraca' Decimal ('3') '. –
[To błąd] (http://bugs.python.org/issue15783) – SilentGhost
@SilentGhost: Widzę w linku, że to błąd w wersji c akceleratora modułu (cokolwiek to jest). To może wyjaśnić, dlaczego nic nie otrzymuję z pdb. Ale czy mogę określić, że chcę czystej wersji Pythona? –