2016-05-02 9 views
0

私はいくつかのチェックボックスを持つhtmlページを作っています。チェックボックスの各値は、疑問符記号で区切られた2つの数字、すなわち「1〜16」である。iterableがPythonの文字列かリストかどうかを調べる

<input class="checkbox1" type="checkbox" name ="nr_ids" id="checkbox_id" value ="1?16">Name1,16</label> <br> 
<input class="checkbox1" type="checkbox" name ="nr_ids" id="checkbox_id" value ="11?4">Name11,4</label> <br> 

は、それから私は、PythonのCGIを使用してこの情報を読み込む:あなたはそれらの両方を選択した場合

NRs = form.getvalue("nr_ids") 
NRids = [] 
for l in NRs: 
    ls = l.split("?") 
    NRids.append(ls) 

のNRは[?、'11 4' '?1 16']になります。あなたが1つだけを選択すると、それは '2?14'になります

数字の各ペアがサブローであるリストのリストです:[['1'、 '16']、['11' 、 '4']]。 2つ以上のチェックボックスを選択すると、これは完璧に機能します。しかし、私はちょうど1を選択すると、プログラムがクラッシュします。 NRidsは[['1'、['、']、['1']、['6']]になります。 NRのタイプを取ろうとすると、何も印刷されません。文字列やリストが渡されたかどうかを自動的にチェックする方法がわからないので、関数を入力しても何も印刷されていないようです。

どのように私は、唯一のチェックボックスは、それがない場合、私は、リストのようなのNRを扱うことはありませんので、選択されているかどうかを確認してくださいだろうか?または、誰かが私がこれをどのように修正できるかについての他の提案がありますか?

+0

の可能性の重複は、[?pythonで種類をチェックするための標準的な方法は何ですか](のhttp://のstackoverflow。 com/questions/152580/whats-the-canonical-way-to-check-for-in-python) – alexis

答えて

3
if isinstance(a_variable,basestring): 
    #its a string of sorts 
elif isinstance(a_variable,(list,tuple)): 
    #its a list or table 

と思いますか?

+0

lolありがとう@timgeb!私は英語のメジャーではなかったいい理由があります:P –

+0

ありがとうございます! – beth

0

処理コードが完全に些細なものではない場合は、タイプを早期にチェックし、より単純なケースをより一般的なケースに変換することです。この場合、値がリストでない場合は、それを1要素リストに変換します。残りのコードその後、あなた自身を繰り返す必要が温存、リストを取得するに頼ることができます。

if not isinstance(NRs, list): 
    NRs = [ NRs ] 

# Now it's a list for sure... 
for l in NRs: 
    ... 
関連する問題