
如题,找了好多帖子没有找到办法! 使用 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() 1 rationa1cuzz 2021 年 5 月 7 日 不应该去找为什么网络断开程序会直接退出吗?这不相当于进程直接被 kill 了吗?这咋么搞,除非你有另一个监控进程 |
2 ch2 2021 年 5 月 7 日 有可能是在前面就异常了 |
3 qile1 OP @rationa1cuzz 这个是 python 脚本,网上说是因为数据库链接断开,但是引用还存在,指向了不存在的内存地址导致程序崩溃,捕获不到异常! 我是数据库建立连接后,开始循环逐条插入数据,最后再关闭数据库连接,在这个过程中如果网络断开下就会程序程序整个崩溃。 |
4 joApioVVx4M4X6Rf 2021 年 5 月 8 日 db.rollback() db.close() 这两个没有 try catch |
5 qile1 OP @v2exblog 不是这个原因吧,我在 cursor.fetchone ()打断点,执行到这里,拔掉网线打开数据库连接,在执行代码,程序未运行到 except 就直接报错退出 |
6 hahaba 2021 年 5 月 8 日 带的有个 ping 函数不知道吗 |
7 joApioVVx4M4X6Rf 2021 年 5 月 8 日 @qile1 解决了吗,我也非常想知道是怎么回事 |
9 qile1 OP 有高手了解不? |
10 qile1 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) |
11 qile1 OP sql server 也有检测机制,select 1 就可以,但是异常是随机的某个时间点,尤其是在耗时间的查询更新时候,数据库链接突然端口就会把程序搞崩溃,这个好像无解 |
12 qile1 OP 也能用遇到这个问题的朋友,给个解决办法 |