Visual Studio 2017中Python脚本运行异常的排查求助
解决VS 2017中Python脚本运行异常的问题,及后续Django开发建议
先从你遇到的核心问题说起:脚本在IDLE和Anaconda IPython里正常跑,但VS 2017里调试时线程退出、程序返回-1,大概率是VS的环境配置或者异步代码处理方式导致的,下面给你一步步排查和解决的方向:
1. 确认VS使用的Python环境是否正确
你说相关包已经安装,那首先要确保VS用的是和Anaconda IPython相同的解释器——毕竟不同环境的依赖是隔离的。操作步骤:
- 在VS的解决方案资源管理器里,右键你的Python项目,选择「Python环境」
- 在弹出的环境列表里,切换到你的Anaconda环境(就是你在IPython里用的那个,能找到pyhaystack和pandas的)
- 切换后可以在「Python交互窗口」里输入
import pyhaystack验证下包是否能正常导入,排除环境不对的问题
2. 调整异步代码的写法,避免直接用.result()
pyhaystack的find_entity和his_read_frame都是异步方法,你用.result()强制同步获取结果的方式,在IDLE/IPython里没问题,但VS的调试器对这种阻塞式的异步调用处理可能有差异。改成标准的async/await写法试试:
import asyncio import numpy as np import pandas as pd from pyhaystack.client.niagara import NiagaraHaystackSession async def main(): # 初始化会话 session = NiagaraHaystackSession(uri='http://1.1.1.1', username='@', password='!', pint=True) rng = '2018-05-08,2018-05-09' # 获取Znt数据 znt = await session.find_entity(filter_expr='sensor and zone and temp and problem') znt = await session.his_read_frame(znt, rng=rng) znt = pd.Series(znt[znt.columns[0]]) # 获取Oat数据 oat = await session.find_entity(filter_expr='sensor and outside and temp and air') oat = await session.his_read_frame(oat, rng=rng) oat = pd.Series(oat[oat.columns[0]]) # 构建DataFrame并打印 McheLrn = pd.DataFrame({'znt' : znt, 'oat' : oat}) McheLrn.index.names=['Date'] McheLrn.reset_index() print(McheLrn) if __name__ == "__main__": asyncio.run(main())
这种写法更符合Python异步编程的规范,也能避免VS调试器的兼容性问题。
3. 添加异常捕获,定位具体错误
程序返回-1 (0xffffffff)通常意味着有未捕获的异常,但VS没显示出来。给代码加个异常捕获块,就能看到具体哪里出问题了:
async def main(): try: # 上面的初始化、数据获取代码 session = NiagaraHaystackSession(uri='http://1.1.1.1', username='@', password='!', pint=True) # ... 其余代码保持不变 except Exception as e: print(f"运行出错:{str(e)}") import traceback traceback.print_exc() # 打印详细的错误栈
运行后看VS的输出窗口,就能知道是连接失败、权限问题,还是某个依赖包的版本兼容问题了。
4. 后续Django开发的准备
你最终要做Django应用展示API数据,提前给你两个小建议:
- 同样要确保Django安装在你选对的Anaconda环境里,在VS的Python环境中执行
pip install django即可 - 把数据获取的逻辑封装成Django的视图函数:如果用Django 3.1+,可以直接写异步视图;如果是旧版本,就在同步视图里用
asyncio.run()调用你的异步数据获取函数,这样就能把数据传递给HTML模板展示了
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

