【发布时间】:2019-04-29 23:48:46
【问题描述】:
我正在构建一个从 iTunes 库导出中的 XML 文件中提取不同属性的应用程序。由于并非每首歌曲都有一个流派,因此为每首歌曲找到一个并不总是有效。当程序将流派插入“流派”时,它会自动创建一个 id
CREATE TABLE Genre (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
name TEXT UNIQUE
);
问题是,当 XML 文件中没有找到“流派”时,不会插入任何内容,这意味着我以后无法获取通过添加某些内容创建的 id 以将其放入 tabke 以进行关系查询。为了阻止这种情况,我将插入和提取放在一个 try/except 中,它会捕获
TypeError: 'NoneType' object is not subscriptable
无法执行时出错
cur.fetchone()[0]
。在除了我将流派设置为“无流派”之外,为没有找到流派的情况生成唯一的 id。即使它在 try 块中捕获了异常,它也没有运行。错误:
TypeError Traceback (most recent call last)
~\Documents\python\tracks.py in <module>
83 cur.execute('SELECT id FROM Artist WHERE name = ? ', (genre, ))
---> 84 genre_id = cur.fetchone()[0]
85 except:
TypeError: 'NoneType' object is not subscriptable
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
~\Documents\python\tracks.py in <module>
87 cur.execute('''INSERT OR IGNORE INTO Genre (name) VALUES ( ? )''', ( genre, ) )
88 cur.execute('SELECT id FROM Artist WHERE name = ? ', (genre, ))
---> 89 genre_id = cur.fetchone()[0]
90
91
TypeError: 'NoneType' object is not subscriptable
帮助!为什么 try/except 不起作用?
try:
cur.execute('''INSERT OR IGNORE INTO Genre (name) VALUES ( ? )''', ( genre, ) )
cur.execute('SELECT id FROM Artist WHERE name = ? ', (genre, ))
genre_id = cur.fetchone()[0]
except:
genre = "No Genre"
cur.execute('''INSERT OR IGNORE INTO Genre (name) VALUES ( ? )''', ( genre, ) )
cur.execute('SELECT id FROM Artist WHERE name = ? ', (genre, ))
genre_id = cur.fetchone()[0]
【问题讨论】:
-
try...except 是让您的代码尝试上面的内容,除了。如果失败,它将执行
except下的代码。如果您将相同的失败代码放在except下,它将不起作用。您的异常表明您的代码在第 84 行(在 try 下)和第 89 行(在 except 下)有问题。所以,尝试...除了工作。更大的问题是,为什么会抛出异常。您是否有可能没有您正在寻找的流派的记录? -
确实如此。问题更像是为什么除了抛出错误之外。第一次运行时,流派成功添加到数据库,但下一首没有流派的歌曲不起作用。为什么即使定义了流派变量它也不插入?
标签: sql python-3.x sqlite