1

HTML から値を取得してファイルに出力する Test.py コードでトレースバック エラーが発生する ファイル記述子のエラーが発生する理由。私は初心者です。

#!/usr/bin/python
import cgi

def get_data():
    '''
    This function writes the HTML data into the file 

    '''

    print "Content- type : text/html\n"

    form = cgi.FieldStorage()

    f = open("abc.txt","w")

    f.write(form.getvalue('firstname'))
    f.write(form.getvalue('lastname'))
    f.write(form.getvalue('age'))
    f.write(form.getvalue('gender'))
    f.close() 

    #print "Hello ", Fname, Lname, Age, Gender

get_data()

トレースバック エラー:

Traceback (most recent call last):
 File "test.py", line 33, in <module>
get_data()
File "test.py", line 25, in get_data
f.write(form.getvalue('firstname') + '\n')
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

私の HTML ソースファイル

 <html>
<head>
<title>INFORMATION</title>
</head>
<body>
 <form action = "/cgi-bin/test.py" method = "post">
    FirstName:
    <input type = "text" name = "firstname" /><br>
    LastName:
    <input type = "text" name = "lastname" /><br>
    Age:
    <input type = "text" name = "age" /><br>
    Gender:
    <input type="radio" name="gender" value="male" /> Male
    <input type="radio" name="gender" value="female" /> Female

    <input type = "submit" name = "submit "value = "SUBMIT">
    <input type = "reset" name = "reset" value = "RESET">
    </form>
 </body>

htmlファイルを追加しました。ご確認ください

4

1 に答える 1

1

このコードは、書き込みモード ( ) でファイルを開きますw

書き込みモードで開かれたファイルを反復することはできません。

渡された POST データをファイルに書き込みたい場合は、単に書き込みます。(forループなし)。\n値を行で区切る場合は、改行 ( ) を追加します。

f = open("abc.txt","w")
f.write(form.getvalue('firstname', '?') + '\n')
f.write(form.getvalue('lastname', '?') + '\n')
f.write(form.getvalue('age', '?') + '\n')
f.write(form.getvalue('gender', '?') + '\n')
f.close() 

使用するwithことがより好ましいです:

with open("abc.txt","w") as f:
    f.write(form.getvalue('firstname', '?') + '\n')
    f.write(form.getvalue('lastname', '?') + '\n')
    f.write(form.getvalue('age', '?') + '\n')
    f.write(form.getvalue('gender', '?') + '\n')

for次のようなことをしていましたか?

with open("abc.txt", "w") as f:
    for param in ['firstname', 'lastname', 'age', 'gender']:
        f.write(form.getvalue(param, '?') + '\n')
于 2013-10-25T09:22:20.363 に答える