13

オプションの引数「b」を使用して、次のように関数を作成しました。

url は b の存在に依存します。

def something(a, b=None)
    if len(b) >= 1:
        url = 'http://www.xyz.com/%sand%s' % (a, b)
    else:
        url = 'http://www.xyz.com/%s' (a)

これは、 「タイプ 'none-type' のオブジェクトには長さがありません」b=Noneというエラーが発生します。

これを回避する方法はありますか?

4

5 に答える 5

43

単純に使用できますif b:-これには、値がNone空の文字列/リスト/その他である必要があります。

于 2012-05-12T21:54:14.750 に答える
8

簡単に変更できます-

def something(a, b=None)

に -

def something(a, b="")
于 2012-05-12T21:53:34.237 に答える
5

の長さを本当にチェックする必要がない限りb、単にそうしないのはなぜですか

if b is not None:
    ...

長さもチェックする必要がある場合 (そのため、 のelse場合にもパーツが実行されますb == "")、

if b is not None and len(b) >= 1:
    ...

andつまり、式のb is None2 番目の部分は評価されないため、例外は発生しません。

于 2012-05-12T21:49:50.533 に答える
4

bでない場合の長さを評価するには、ステートメントを次のようNoneに変更します。if

if b is not None and len(b) >= 1:
   ...

and演算子のためlen(b)、最初のテスト ( b is not None) が失敗した場合は評価されません。つまり、式の評価が短絡しています。

于 2012-05-12T21:49:34.517 に答える
1

このコードを試すことができます:

def something(a, *b):
    if len(b) == 0:
        print('Equivalent to calling: something(a)')
    else:
        print('Both a and b variables are present')
于 2017-03-08T06:23:35.107 に答える