私はsix.py
django utilsのコードを調べていましたが、Jython 以外の実装では、int の MAXSIZE を見つけようとします。さて、これが行われる方法は興味深いものです。ステートメント自体で例外をキャッチする代わりに、ステートメントは__len__
カスタム クラスのメソッド内にラップされます。そうする理由は何ですか?
class X(object):
def __len__(self):
return 1 << 31
try:
len(X())
except OverflowError:
# 32-bit
MAXSIZE = int((1 << 31) - 1)
else:
# 64-bit
MAXSIZE = int((1 << 63) - 1)
del X
私が間違っていなければ、同じことが以下にも短縮された可能性がありますよね?
try:
1 << 31
except OverflowError:
# 32-bit
MAXSIZE = int((1 << 31) - 1)
else:
# 64-bit
MAXSIZE = int((1 << 63) - 1)