2017-11-15 16 views
2

私はPythonでメソッドを持っていますが、整数または単数を受け入れることができます。引数には、Pythonで列挙された整数のみが含まれていると主張する方法

def autoInt(integers): 
    assert int(integers) 
    assert len(integers) > 0 

これはリストがないため失敗します。私はそれが何か簡単だと確信しています。

TypeError: int() argument must be a string or a number, not 'list'

編集:このメソッドは、リスト内の整数のみを受け入れることができます。

+0

これに 'assert'を使用してもよろしいですか? 'assert'ステートメントは、プログラムのロジックが正しいことを確認するために使用されます。データの検証ではありません。あなたのプログラムのロジックが正しい場合には何も起こらないでください。 –

答えて

2

あなたの定義によって、整数として渡すかに依存します。たとえば、boolのインスタンスはカウントされますか?浮動小数点は1.0ですか?

とにかく、allの組み込み関数とジェネレータ式を組み合わせることができます。追記として

>>> a = [1,2,True] 
>>> all(isinstance(x, int) for x in a) 
True 
>>> all(type(x) == int for x in a) 
False 

は:厳密には特別な理由がないときのPythonプログラマがない何かに引数の型をチェックします。より良いアプローチは、通常、明確なドキュメントストリングおよび/またはヒントを書くことです。

Hereは、後者を行う方法を説明する回答です。それとは別に、通常は「ガベージ・イン・ゴミ(またはエラー)」という考え方があります。

+0

ありがとう@timgeb。私は計算上の問題の仕様も書き出さなければなりません。ちょうど '必須である必要があります'を含めるための事前条件を取得したかったのです。 – SCramphorn

+0

@SCramphornよろしくお願いします。 – timgeb

0
>>> my_list = [1, 2, 3.25] 
>>> all(isinstance(item, int) for item in my_list) 
False 
>>> other_list = range(3) 
>>> all(isinstance(item, int) for item in other_list) 
True 
>>> 

から

assert(all(isinstance(item, int) for item in integers)) 

出典:https://stackoverflow.com/a/6009630/6748523

+1

このコードスニペットは質問を解決するかもしれませんが、説明を含めて本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。その人達はあなたのコード提案の理由を知らないかもしれません。 – jean

関連する問題