异常处理&&抛出异常

29 篇文章 0 订阅

异常处理机制: 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")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值