我遇到以下代码问题。正如您所看到的,我在函数setup_session()
中设置了一个sqlite3数据库,但是当我尝试运行它时会抛出异常,因为我在cursor
中创建的对象setup_session()
仅可用在函数内部。
import sqlite3
def setup_session():
db = sqlite3.connect("data.db")
cursor = db.cursor()
setup_session()
cursor.execute("CREATE TABLE subjects (subject text)")
如何更改它以便光标也可以在函数外部使用?
答案 0 :(得分:8)
按字面意思回答您的问题:在功能顶部添加global cursor
:
def setup_session():
global cursor
db = sqlite3.connect("data.db")
cursor = db.cursor()
然而global
不良好的编程习惯,你几乎总能使用更好的风格。在这里,我建议:
def setup_session():
db = sqlite3.connect("data.db")
return db.cursor()
cursor = setup_session()
也就是说,避免global
:将函数return
作为结果,而不是将其存放到全局变量中,并将结果分配给调用<时所需的任何变量/ strong>功能。
这种风格通常允许更好的测试,更好的维护,更少的麻烦,更多的灵活性(如果明天你想在cursor1
和cursor2
中使用两个游标,例如?全局变量需要维护,使用return
结果的更好方法是微不足道的。)。
答案 1 :(得分:2)
难道你不能退货吗?
def setup_session():
db = sqlite3.connect("data.db")
return db.cursor()