Ich kann das Verhalten für Python 3.3 bestätigen. Es erkennt irgendwie, dass Sie die None
als Kontext übergeben haben und es nicht mag (obwohl es als Standardwert dokumentiert ist).
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')
Update: Aber es funktioniert mit 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')
>>>
Update: Der Grund kann in der doc gefunden werden ...
What’s New In Python 3.3 sagt:
dezimal
Ausgabe 7652 - schnelle native Dezimalarithmetik integrieren. C-Modul und Libmpdec geschrieben von Stefan Krah.
Wenn die decimal.py
Dateien zu vergleichen, können sie gleich auf den ersten Blick, aber die Python 3.3-Version enthält den folgenden Code fast am Ende:
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 *
... während die ältere Python 3.2 tut nicht. Es besagt, dass wenn die binäre _decimal
Implementierung importiert werden kann, die ältere Implementierung von decimal.py
ignoriert wird. Und das Binärmodul kann nicht mit dem Python-Code-Debugger debuggt werden.
Die Frage ist, ob das beobachtete Verhalten nicht als Fehler angesehen werden sollte.
Für was es wert ist, kann ich dies unter Python 3.2.3 nicht reproduzieren: 'import dezimal; decimal.Decimal ("3", None) 'liefert erfolgreich Decimal ('3')' zurück. –
[Es ist ein Fehler] (http://bugs.python.org/issue15783) – SilentGhost
@SilentGhost: Ich sehe in der Verbindung, dass es ein Fehler in der c-Accelerator-Version des Moduls ist (was auch immer das ist). Dies kann erklären, warum ich nichts von pdb bekomme. Kann ich aber angeben, dass ich die reine Python-Version haben möchte? –