如题,找了好多帖子没有找到办法! 使用 try: except: 无法捕获异常,程序直接退出,我代码如下:
try:
    db = pymssql.connect(host='127.0.0.1',user='sa',password='sa',database='temp',charset='cp936')
    state=0
except pymssql.OperationalError:
    pass
except TypeError:
    pass
    #传参错误
except pymssql.InterfaceError:
    pass
except Exception as e:
    traceback.print_exc()
    print(e)
cursor = db.cursor()
try:
    # 执行 sql 语句
    sql="""SELECT * FROM xm_info"""
    cursor.execute(sql) # 如果执行到此处发生网络断开,程序直接异常退出,下面异常捕获无数据
    result = cursor.fetchone()
    cursor.execute(sql2) # 如果执行到此处发生网络断开,程序直接异常退出,下面异常捕获无数据
    result2 = cursor.fetchone()
    cursor.execute(sql3) # 如果执行到此处发生网络断开,程序直接异常退出,下面异常捕获无数据
    result3 = cursor.fetchone()
    
except: 
    # 输出异常信息,此处如果网络断开无法捕获异常
    traceback.print_exc()
    # 如果发生异常,则回滚
    db.rollback()
finally:
    # 最终关闭数据库连接
    db.close()
|  |      1rationa1cuzz      2021-05-07 16:36:33 +08:00  1 不应该去找为什么网络断开程序会直接退出吗?这不相当于进程直接被 kill 了吗?这咋么搞,除非你有另一个监控进程 | 
|  |      2ch2      2021-05-07 16:53:04 +08:00 有可能是在前面就异常了 | 
|      3qile1 OP @rationa1cuzz 这个是 python 脚本,网上说是因为数据库链接断开,但是引用还存在,指向了不存在的内存地址导致程序崩溃,捕获不到异常! 我是数据库建立连接后,开始循环逐条插入数据,最后再关闭数据库连接,在这个过程中如果网络断开下就会程序程序整个崩溃。 | 
|      4joApioVVx4M4X6Rf      2021-05-08 10:21:00 +08:00 db.rollback() db.close() 这两个没有 try catch | 
|      5qile1 OP @v2exblog 不是这个原因吧,我在 cursor.fetchone ()打断点,执行到这里,拔掉网线打开数据库连接,在执行代码,程序未运行到 except 就直接报错退出 | 
|      6hahaba      2021-05-08 16:18:38 +08:00 带的有个 ping 函数不知道吗 | 
|      7joApioVVx4M4X6Rf      2021-05-08 16:55:10 +08:00 @qile1 解决了吗,我也非常想知道是怎么回事 | 
|      8qile1 OP @xunbug pymysql 有 ping 函数,但是连接微软 sql server 的 pymssql 没有这个功能 | 
|      9qile1 OP 有高手了解不? | 
|      10qile1 OP 这个其实是 python 解释器崩溃啦,因为数据库异常断开后,python 程序不知道是否断开,程序在访问的时候其实是访问一个不存在的内存地址,导致 window 系统程序保护报错 错误应用程序名称: python.exe ,版本: 3.6.8150.1013 ,时间戳: 0x5c201b63 错误模块名称: python36.dll ,版本: 3.6.8150.1013 ,时间戳: 0x5c201ad5 异常代码: 0xc0000005 错误偏移量: 0x0011493c 错误进程 ID: 0x1990 错误应用程序启动时间: 0x01d8418405083fe9 []( https://imgtu.com/i/qBc6De) | 
|      11qile1 OP sql server 也有检测机制,select 1 就可以,但是异常是随机的某个时间点,尤其是在耗时间的查询更新时候,数据库链接突然端口就会把程序搞崩溃,这个好像无解 | 
|      12qile1 OP 也能用遇到这个问题的朋友,给个解决办法 |