2

HTMLフォームから整数値を取得したいので、次のpythonコードを使用しました:

    form = cgi.FieldStorage()
    if not form.has_key("id"):
        error_pop("There is no id in this form","The format of the request is not correct")
    id = form["id"].value    (*)

HTML ファイルでは、入力タイプを次のようにしますnumber

id: <input type="number" name="id" /><br />

ただし、行 ( ) から取得した id*はまだ文字列のままのようです。

どうすれば整数に変換できますか?

を使用しようとしint(form["id"].value)ましたが、python で次のエラーが表示されました。

<type 'exceptions.TypeError'>: %d 形式: 文字列ではなく数値が必要です args = ('%d 形式: 文字列ではなく数値が必要です',) メッセージ = '%d 形式: 文字列ではなく数値が必要です'

ということで、使用を断念int()

に解析する前に値を出力しようとするとint()、ブラウザから内部サーバー エラーが発生します。実際、pythonファイルで何かを変更すると、常にこのエラーが発生します。error_log.log からエラーを確認できます。

/usr/lib/python2.6/cgitb.py:173: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
value = pydoc.html.repr(getattr(evalue, name))

実際、error.log から今日の時刻を grep すると、現在のエラーは表示されませんが、実際には数時間前に発生したエラーが終了します...

新しいことがわかりました。「id」が関係している場合にのみ、内部サーバー エラーが表示されます。のようなid = form["idid"].valueことをすると、エラーが発生します。

<type 'exceptions.TypeError'>: int() argument must be a string or a number, not 'NoneType' 
      args = ("int() argument must be a string or a number, not 'NoneType'",) 
      message = "int() argument must be a string or a number, not 'NoneType'"

どんな助けでも大歓迎です。

4

2 に答える 2

1

値をフォームから数値に変換できないという、あなたと同じ問題を抱えていました。これは、このブログ投稿から採用した別のソリューションです。q1、q2、q3 などのラジオ ボタン セットから返された値がいくつかあり、この辞書を使用してそれらを変換します。

 str2num = {"1":1, "2":2, "3":3, "4":4, "5":5, "6":6}

 val1 = str2num[ form.getvalue("q1") ]
 val2 = str2num[ form.getvalue("q2") ]
 val3 = str2num[ form.getvalue("q3") ]

フォーム要素「q1」の値は数字の文字列形式だったので、これを数値形式に変換します。あなたと同じように、うまくいきint( form.getvalue("q1") )ませんでした。なぜこれができるのかはまだわかりません。

于 2015-11-23T04:01:26.280 に答える
0

formに渡す要素の値はint、http サーバーから返されたエラー メッセージです:
"%d format: a number is required, not str"
引数のために、idフィールドを type="number" に変更しますが、type="text" にします。私の推測では、これにより整数への変換が可能になります。結果を整数にする必要がある場合は、次のようなものを使用します

while not id:
  try:
    id = int(form["id"].value)
  except TypeError:
    error_pop("id should be number")
于 2012-10-11T08:06:52.327 に答える