为什么我的异常无法抛出呢?求老师解答
import mysql.connector conn = mysql.connector.connect(user='root',password='password',database='test',port=3306) class TransferMoney(object): def __init__(self,conn): self.conn=conn def check_acct_available(self,acctid): cursor=self.conn.cursor() try: sql = 'select * from account where acctid=%s' % acctid cursor.execute(sql) print('check_acct_available:'+sql) rs = cursor.fetchall() if len(rs)!=1: raise Exception('账号%s不存在'%acctid) finally: cursor.close() def has_enough_money(self,acctid,money): cursor=self.conn.cursor() try: sql = 'select * from account where acctid=%s and money>%s' % (acctid,money) cursor.execute(sql) print('has_enough_money:'+sql) rs = cursor.fetchall() if len(rs)!=1: raise Exception('账号%s余额不足!'%acctid) finally: cursor.close() def reduce_money(self,acctid,money): cursor=self.conn.cursor() try: sql = 'update account set money=money-%s where acctid=%s' % (money,acctid) cursor.execute(sql) print('reduce_money:'+sql) if cursor.rowcount !=1: raise Exception('付款账号%s扣款失败!'%acctid) finally: cursor.close() def add_money(self,acctid,money): cursor=self.conn.cursor() try: sql = 'update account set money=money+%s where acctid=%s' % (money,acctid) cursor.execute(sql) print('add_money:'+sql) if cursor.rowcount !=1: raise Exception('收款账号%s记账失败!'%acctid) finally: cursor.close() def transfer(self,source_acctid,target_acctid,money): try: self.check_acct_available(source_acctid) self.check_acct_available(target_acctid) self.has_enough_money(source_acctid,money) self.reduce_money(source_acctid,money) self.add_money(target_acctid,money) self.conn.commit() except Exception as e: self.conn.rollback() raise e tr_money=TransferMoney(conn) if __name__ == '__main__': try: tr_money.transfer(11,12,100) except Exception as e: print('出现错误:'+str(e)) finally: conn.close()
我是用sublime写的,但是Ctrl+b执行没有异常抛出。。。。比如付款账户余额不足时结果:
check_acct_available:select * from account where acctid=11
check_acct_available:select * from account where acctid=12
has_enough_money:select * from account where acctid=11 and money>100
[Finished in 0.3s]