11

整数として提供されるjobbyjobNumberのフェッチをサポートする小さな Python 2.x API を作成しようとしています 。jobNumber時々、ユーザーはjobNumber0 で始まる整数リテラルとしてa を提供します037537。(これは、R を適切に考慮する言語である R によって甘やかされてきたため037537==37537です。) ただし、Python は、「0」で始まる整数リテラルを 8 進数と見なし、したがって037537!=37537、代わりに037537==16223. これは、最小の驚きの原則に対する露骨な侮辱であると私は思います。ありがたいことに、これは Python 3 で修正されたようです--- PEP 3127を参照してください。

しかし、現時点では Python 2.7 に固執しています。だから私のユーザーはこれを行います:

>>> fetchJob(037537)

黙って間違ったジョブ (16223) を取得するか、次のようにします。

>>> fetchJob(038537)
File "<stdin>", line 1
 fetchJob(038537)
            ^
SyntaxError: invalid token

ここで、Python は 8 進数と互換性のない数字を拒否しています。

Py3K の動作を取得できるようにするために提供されたものは何もないようです__future__---少なくともレクサーの変更が必要になるため、何らかの方法で Python に組み込む必要があります。

このような場合に、ユーザーが間違った仕事に就くのを防ぐ方法を知っている人はいますか? 現時点で考えられる最善の方法は、その API を変更して、int ではなく文字列を取ることです。

4

2 に答える 2

6

現時点で私が考えることができる最善の方法は、そのAPIを変更して、intではなく文字列を使用するようにすることです。

はい、状況を考えるとこれは合理的な選択肢だと思います。

もう1つのオプションは、すべてのジョブ番号に7より大きい数字が少なくとも1つ含まれていることを確認して、先行ゼロを追加すると誤った結果ではなくすぐにエラーが発生するようにすることですが、これは文字列を使用するよりも大きなハックのようです。

最後のオプションは、ユーザーを教育することかもしれません。先行ゼロを追加しないことと、追加するとどうなるかを説明するのに5分ほどかかります。古い習慣のためにゼロを忘れたり、誤って追加したりした場合でも、以前に聞いたことがある場合は、問題を発見する可能性が高くなります。

于 2012-07-16T22:31:12.887 に答える