1.能得到执行,无论如何finally语句块中的语句都会执行的。
try语句块执行完成后,finally语句块是一定会执行的。
2.try中有return, 会先将值暂存,无论finally语句中对该值做什么处理,最终返回的都是try语句中的暂存值。
当try与finally语句中均有return语句,会忽略try中return。
代码测试:
def test_finally_return1():
try:
print("This is 1")
return 1
finally:
print("This is 0")
return 0
def test_finally_return2():
try:
print("This is 1")
return 1
finally:
print("This is 0")
#return 0
def test_else_finally1():
try:
print("This is 1")
return 1
except:
return 2
else:
print("This is 3")
return 3
finally:
print("This is 0")
#return 0
def test_else_finally2():
try:
print("This is 1")
return 1
except:
return 2
else:
print("This is 3")
#return 3
finally:
print("This is 0")
return 0
def test_else_finally3():
try:
print("This is 1")
#return 1
except:
print("This is 2")
#return 2
else:
print("This is 3")
#return 3
finally:
print("This is 0")
return 0
def test_else_return1():
try:
print("This is 1")
return 1
except:
return 2
else:
print("This is 3")
return 3
# finally:
# print(0)
#return 0
def test_else_return2():
try:
print("This is 1")
#return 1
except:
return 2
else:
print("This is 3")
return 3
# finally:
# print(0)
#return 0
if __name__ == '__main__':
print('测试1')
print(test_finally_return1())
print('测试2')
print(test_finally_return2())
print('测试3')
print(test_else_finally1())
print('测试4')
print(test_else_finally2())
print('测试5')
print(test_else_return1())
print('测试6')
print(test_else_return2())
print('测试7')
print(test_else_finally3())
习题13
1.创建数据表
# coding=utf-8
import sqlite3
conn = sqlite3.connect('Shift_MIS.db')
cur = conn.cursor()
cur.execute("PRAGMA foreign_keys=ON")
# 构建数据表创建及文本数据导入函数
def create_table(tab_name, col_prop_list, txt_path, conn=conn, cur=cur):
col_name_props = ','.join(col_prop_list)
cur.execute('CREATE TABLE IF NOT EXISTS %s(%s)'%(tab_name,col_name_props))
f = open(txt_path,'r')
for x in f:
x = x.rstrip().split(',')
a = [ "'%s'" % x[i] for i in range(len(x))]
x = ','.join(a)
cur.execute('INSERT INTO %s values(%s)'%(tab_name,x))
f.close()
print('%s创建成功' % tab_name)
print(' %s导入成功' % txt_path)
conn.commit()
def table_struct(tab_name, cur=cur):
cur.execute("PRAGMA table_info(%s)" % tab_name)
t_struct = cur.fetchall()
for item in t_struct:
for x in item:
x = str(x)
print(x, sep='t', end=' ')
print()
# 构建数据表内容查询函数
def table_quer(tab_name, col_names='*', num_line=None, cur=cur):
cur.execute('select %s from %s' % (col_names, tab_name))
Li = cur.fetchall()
for line in Li[:num_line]:
for item in line:
print(item, sep='t', end=' ')
print()
if __name__ == '__main__':
#(1)创建专业表
tab_name_1 = '专业表'
col_prop_list_1 = ['专业编号 varchar(7) primary key',
'专业名称 varchar(7)']
txt_path_1 ='专业表.txt'
create_table(tab_name_1,col_prop_list_1,txt_path_1)
#(2)创建学生表
tab_name_2 = '学生表'
col_prop_list_2 = ['学号 varchar(7) primary key',
'姓名 varchar(7)',
'性别 tinyint',
'生日 text NULL',
'专业编号 varchar(7) REFERENCES 专业表(专业编号) ON UPDATe CASCADE ON DELETE CASCADE',
'奖学金 numeric NULL',
'党员 tinyint NULL',
'照片 blob NULL',
'备注 text NULL']
txt_path_2 = '学生表.txt'
create_table(tab_name_2, col_prop_list_2, txt_path_2)
# (3) 创建课程表
tab_name_3 = '课程表'
col_prop_list_3 = ['课程号 varchar(7) primary key',
'课程名称 varchar(7) NULL',
'先修课程代码 varchar(7) NULL',
'学时 smallint', '学分 smallint']
txt_path_3 = '课程表.txt'
create_table(tab_name_3, col_prop_list_3, txt_path_3)
# (4)创建成绩表
tab_name_4 = '成绩表'
col_prop_list_4 = ['学号 varchar(7) REFERENCES 学生表(学号) ON UPDATE CASCADE ON DELETE CASCADE',
'课程号 varchar(7) REFERENCES 课程表(课程号) ON UPDATE CASCADE ON DELETE CASCADE',
'成绩 smallint NULL',
'PRIMARY KEY (学号,课程号)']
txt_path_4 = '成绩表.txt'
create_table(tab_name_4, col_prop_list_4, txt_path_4)
执行后:
1.
代码:
import sqlite3
conn = sqlite3.connect('Shift_MIS.db')
cur = conn.cursor()
cur.execute("INSERT INTO stu('学号','姓名','性别','生日','专业编号','奖学金','党员','照片','备注') "
"values('1234556','小明','男','1979/1/12 0:00:00',13,0,0,0,0)")
#cur.execute("UPDATE 成绩表 set 成绩=80 where 学号='0307341' and 课程号='03'")
conn.commit()
代码:
import sqlite3
conn = sqlite3.connect('Shift_MIS.db')
cur = conn.cursor()
#cur.execute("INSERT INTO stu('学号','姓名','性别','生日','专业编号','奖学金','党员','照片','备注') "
# "values('1234556','小明','男','1979/1/12 0:00:00',13,0,0,0,0)")
cur.execute("UPDATE 成绩表 set 成绩=80 where 学号='0307341' and 课程号='03'")
conn.commit()
3.代码:
import sqlite3
conn = sqlite3.connect('Shift_MIS.db')
cur = conn.cursor()
#cur.execute("INSERT INTO stu('学号','姓名','性别','生日','专业编号','奖学金','党员','照片','备注') "
# "values('1234556','小明','男','1979/1/12 0:00:00',13,0,0,0,0)")
#cur.execute("UPDATE 成绩表 set 成绩=80 where 学号='0307341' and 课程号='03'")
cur.execute("delete from stu where 学号='0502313'")
conn.commit()
执行:



