Windows10下Python修改后仍运行旧版代码非Git问题求助
问题描述
- 修复代码时已将原调用
.extent属性的逻辑替换为调用.coordinates()方法,对应旧代码段已删除,但程序运行时仍执行已删除的旧逻辑触发报错,报错中触发错误的行即为已删除的旧代码 - 已尝试更换IDE、重启设备,问题未解决
- 运行环境:Windows 10,代码未纳入Git版本管理,基于ArcGIS Pro内置Python环境运行,代码存储在SMB网络共享盘
- 完整报错信息如下:
Traceback (most recent call last): File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\PGE_Pro_Py3\lib\site-packages\arcgis\geometry\_types.py", line 183, in __getattr__ return self.__getitem__(name) File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\PGE_Pro_Py3\lib\site-packages\arcgis\geometry\_types.py", line 190, in __getitem__ return dict.__getitem__(self, k) KeyError: 'extent' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "\\rcnas01-smb\NRM_DataTeam\e_Scripts\~DS\Defensible_space_pre_inspection_form_export_2022_20211029.py", line 192, in <module> map_server_response = temp.site_map(item_webmap, 'Asset Centroid', "ASSET_NAME = '{}'".format(which_one)) File "\\rcnas01-smb\NRM_DataTeam\e_Scripts\template_fxn.py", line 154, in site_map extent = sdf_zoomer.spatial.bbox.buffer(400).extent File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\PGE_Pro_Py3\lib\site-packages\arcgis\geometry\_types.py", line 186, in __getattr__ "'%s' object has no attribute '%s'" % (type(self).__name__, name) AttributeError: 'Geometry' object has no attribute 'extent'
排查与解决步骤
按优先级从高到低排查,90%以上的同类问题都是前两个原因导致的:
- 确认你修改的是实际被加载的目标文件
从报错堆栈看,你运行的主脚本在\\rcnas01-smb\NRM_DataTeam\e_Scripts\~DS\目录下,但实际调用的site_map函数来自上一级目录的\\rcnas01-smb\NRM_DataTeam\e_Scripts\template_fxn.py。绝大多数人遇到这个问题都是改了其他位置的同名文件(比如~DS目录下的template_fxn.py副本),根本没动到实际被import加载的源文件。
直接在主脚本最开头加两行代码,运行后打印的路径就是程序实际读取的模块路径,打开这个路径下的文件核对第154行内容:import temp print(temp.__file__) - 清除缓存,解决旧字节码/网络共享缓存不刷新问题
- 完全关闭ArcGIS Pro、所有运行相关脚本的Python进程,避免文件被锁定无法更新
- 遍历脚本所在的所有目录,删除全部
.pyc后缀的字节码文件,以及所有名为__pycache__的缓存文件夹 - 如果是在ArcGIS Pro的脚本工具中运行代码,打开Pro选项-地理处理设置页,清除地理处理工具缓存
- 由于你的代码存在SMB网络共享盘上,Windows默认会开启SMB文件缓存,容易出现本地修改后服务端文件未同步/本地读取旧缓存的问题,可以把整个脚本目录复制到本地磁盘(非网络映射盘)后运行测试,排除共享盘同步问题
- 排查模块重名冲突
检查ArcGIS Pro对应Python环境的site-packages目录下,是否存在同名的template_fxn.py或者打包过的同名模块,Python导入模块时会优先搜索系统路径、site-packages路径,再搜索脚本所在目录,如果site-packages下留了旧版本的同名模块,你修改脚本目录下的文件不会生效。 - 检查代码拼写错误
你提到替换后的写法是调用.cooridnates(),注意这个拼写是错误的,ArcGIS Geometry对象获取坐标的正确方法名是.coordinates(),避免改完旧问题又触发新的属性不存在报错。
内容的提问来源于stack exchange,提问作者Crash
相关产品推荐
相关产品推荐

