异常处理机制: try…..except…..finally…..
try:
# 需要捕获异常的代码块, 必须执行, 如果遇到异常, 调转到excepct语句;
# 如果异常能被except后面的Error捕获, 执行except语句的内容, 然后执行finally;
# 如果异常不能被except后面的Error捕获, 直接执行finally;;
f = open('/etc/passwd')
# 10/0
# a
# f.close()
except ZeroDivisionError as e:
print e
\# 捕获异常NameError
except NameError as e:
print e
finally:
# 必须会执行的语句;
f.close()
print "正在关闭文件......"
print "hello"
实验:
print 10/0
print '这时测试会不会内打印出来'
--->>这种情况遇到10/0后直接报错,程序退出,不会执行第二条打印命令
Traceback (most recent call last):
File "/Python/root/day09.py", line 12, in <module>
print 10/0
ZeroDivisionError: integer division or modulo by zero
try机制
try:
print 10/0
except Exception as e:
print e
finally:
print '这时finally语句'
print '这时测试会不会内打印出来'
--->>
integer division or modulo by zero
这时finally语句
这时测试会不会内打印出来
对于前边的数据库编程可以这样
import time
import MySQLdb as mysql
db = {
'user': 'root',
'passwd': 'redhat',
'host': 'localhost',
'port': 3306,
'charset': 'utf8',
'db': 'user',
}
class mMysql(object):
##database形式参数
def __init__(self, **database):
##创建数据库的连接
self.user = database['user']
self.__passwd = database['passwd']
self.host = database['host']
self.__port = database['port']
self.charset = database['charset']
self.db = database['db']
self.conn = mysql.connect(user=self.user, passwd=self.__passwd,
host=self.host, port=self.__port,
db=self.db, charset=self.charset)
##创建游标,给数据库发送sql语句
self.cur = self.conn.cursor()
print '[%s]:数据库正在链接中...' % time.ctime()
def is_table_exist(self, table_name):
self.cur.execute('show tables;')
for name in self.cur.fetchall():
if name[0] == table_name:
return True
else:
return False
def select_table(self, table_name, num=1):
try:
self.cur.execute('select * from %s' %table_name)
for i in self.cur.fetchmany(num):
print i
except Exception:
print '%s不存在' % table_name
def create_table(self, table_name, **attr):
s = ''
try:
for k, v in attr.items():
s = s + k + ' ' + v + ','
s = s.rstrip(',')
sqli = 'create table %s(%s);' %(table_name, s)
print 'sqli语句:', sqli
self.cur.execute(sqli)
print '%s创建成功' %(table_name)
except Exception:
print '%s已经存在了' %(table_name)
def __del__(self):
self.cur.close()
self.conn.close()
print '[%s]:数据库正在断开...' %(time.time())
sql = mMysql(**db)
sql.create_table('userinfo2', user='varchar(10)', age='int')
# sql.__del__()
# sql.select_table('python',2)
抛出异常raise 异常类型
class AgeError(IOError):
pass
age = raw_input('Age:')
if not 0<int(age)<=200:
# raise IOError("age: between 0~200")
# 抛出自定义异常
raise AgeError("age: between 0~200")