为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的异常无法抛出呢?求老师解答

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]

正在回答

1 回答

已经解决了,在命令行模式下没有问题

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Python操作MySQL数据库
  • 参与学习       85011    人
  • 解答问题       171    个

本视频教程讲解Python如何开发MySQL数据库程序

进入课程

为什么我的异常无法抛出呢?求老师解答

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信