0

私はプログラミングが初めてで、現時点でエラー処理を解決しようとしています。しかし、私は同じ問題に遭遇し続けます。エラーが見つかったら、スクリプトをもう一度実行したいと思います。問題は、最初の間違いの後に正しい入力を入力した場合でも、それが正しくない入力と見なされることです。私を助けてください。

def new_user_name()
    print "Choose a Username"
    username = input_str()

    try: 
        data = lite.connect(database)
        dat = data.cursor()
        dat.execute("INSERT INTO Users('User_Name') VALUES(?)", username);
        dat.rollback()
        return username
    except: 
        print "The username %s is already in use" % username
        time.sleep(2)
        new_user_name()

誰かが私を助けたり、エラー処理に関する素晴らしいチュートリアルをリンクしたりできますか? それは私がたくさん助けるだろう

4

3 に答える 3

0

Pythonには優れた公式ドキュメントがあります。リンクは次のとおりです。

v 2.7 http://docs.python.org/2/tutorial/errors.html v 3.3 http://docs.python.org/3.3/tutorial/errors.html

except:Exceptionクラスなしで使用してはならないことに注意してください。これは悪い習慣です。

于 2013-02-24T20:24:27.230 に答える
0

dat.rollback()(これが有効な構文である場合、チェックしませんでしたが、近くに見えます)は、tryセクションではなく、exceptセクションにある必要があります。

関数の外部で(したがって、関数呼び出しごとにデータベース接続を開始する必要がないように)、または少なくともtryセクションの外部でデータベース接続を初期化した方がよいことに注意してください。

于 2013-02-24T20:28:02.530 に答える
0
dat.execute("INSERT INTO Users('User_Name') VALUES(?)", username);

この行が問題です。2番目の引数は文字列ではなくタプルである必要があるため、 。を生成しValueErrorます。sqlite3.IntegrityError(重複した主キーを挿入しようとすると発生する)エラーだけでなく、すべてのエラーをキャッチしているため、常にexceptブロックになります。

except回避できる場合は、キャッチオールブロックを使用しないでください。

于 2013-02-24T20:29:33.000 に答える