0

単純な ddl プログラムですが、応答が y または n を使用すると、名前エラーが発生します。y は定義されていません。1 または 2 を使用するようにコードを変更すると、プログラムは正常に動作します。y または n が名前エラーをスローする方法に混乱しています。入力結果を文字列として定義しようとしましたが、それでも名前エラーが発生しました。

import sqlite3
#
def create_table(db_name,table_name,sql):
    with sqlite3.connect(db_name) as db:
        cursor = db.cursor()
        cursor.execute('select name from sqlite_master where name=?',(table_name,))
        result = cursor.fetchall()
        keep_table = True
        if len(result) == 1:
#Problem area
            response = input('The table {0} already exists, do you wish to overide? (y/n): '.format(table_name))
            if response == 'y':
#Problem area end
                keep_table = False
                cursor.execute('drop table if exists {0}'.format(table_name))
                print('Table overwritten')
                db.commit()
            else:
                print('Table kept')
        else:
            keep_table = False
        if not keep_table:
            cursor.execute(sql)
            db.commit()
#
if __name__ == '__main__':
    db_name = 'coffee_shop.db'
    sql = '''create table Product
             (ProductID integer,
             Name varchar(30),
             Price real,
             primary key(ProductID))'''
    create_table(db_name,'Product',sql)

エラーメッセージ

The table Product already exists, do you wish to overide? (y/n): y
Traceback (most recent call last):
  File "coffee_shop_v2.db", line 34, in <module>
    create_table(db_name,'Product',sql)
  File "coffee_shop_v2.db", line 13, in create_table
    response = input('The table {0} already exists, do you wish to overide? (y/n): '.format(table_name))
  File "<string>", line 1, in <module>
NameError: name 'y' is not defined
4

1 に答える 1

1

raw_inputの代わりに関数を使用してくださいinput。Inputevalは、明らかに探しているものではない応答です。

見る

于 2013-07-28T16:00:59.553 に答える