m0_57748717 2022-11-04 17:42 采纳率: 76.3%
浏览 11
已结题

关于try except代码块问题

我编辑了一个将excel数据导入oracle的函数,并加入try-except代码块,导入sql有误的时候,函数会捕捉报错的信息,并将错误的信息和引发错误的sql语句加入提早创建好的空列表,然后打印报错信息和错误的sql,并自动停止循环导入的sql,但下面代码在捕捉到异常的时候,就直接执行break,不打印任何报错信息和sql,请问是因为try-except执行逻辑的问题,还是代码流程本身有问题呢?


def ora_program(name, df_im, sql_list, con_detail):
    """
    :param df_im:
    :param name:
    :param sql_list:
    :param con_detail:
    """
    err_type = []
    err_list = []
    conn = cx_Oracle.connect(con_detail)
    cursor = conn.cursor()
    for sql in sql_list:
        try:
            if len(err_list) == 0:
                if sql.startswith('create table'):
                    cursor.execute(sql)
                else:
                    cursor.execute(sql)
                    conn.commit()
                    print("成功执行语句:{}".format(sql))
            else:
                cursor.execute('drop table YB_{} purge'.format(name.replace('.csv', '').replace('.xlsx', '')))
        except DatabaseError as e:
            err_type.append(e)
            err_list.append(sql)
            print(err_type, err_list)
            print('导入数据格式有误,已执行删表操作,成功删除表YB_{}'.format(name.replace('.csv', '').replace('.xlsx', '')))
            break

    if len(err_list) == 0:
        print('成功创建表“YB_{}”并插入{}条数据'.format(name.replace('.csv', '').replace('.xlsx', ''), len(df_im)))

    cursor.close()
    conn.close()
  • 写回答

1条回答 默认 最新

  • 二九筒 2022-11-04 17:49
    关注

    你要确定你代码报的错一定是DatabaseError ,不然就是直接停止啥也捕获不到,你还不如直接用exception捕获

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 11月4日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分