首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoreLocation AttributeError

CoreLocation AttributeError
EN

Stack Overflow用户
提问于 2015-04-20 18:47:39
回答 1查看 280关注 0票数 1

我正在尝试使用下面的python脚本来查找我的Mac的当前位置。它使用python目标-C桥,有时也能工作。然而,有时我会得到以下的AttributeError,我不确定我应该做什么来修复错误。

代码语言:javascript
复制
#!/usr/bin/python
# encoding: utf-8

import CoreLocation
manager = CoreLocation.CLLocationManager.alloc().init()
manager.delegate()
manager.startUpdatingLocation()
coord = manager.location().coordinate()
lat, lon = coord.latitude, coord.longitude
print lat, lon

以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "Desktop/SimpleCoreServices.py", line 11, in <module>
    coord = manager.location().coordinate()
AttributeError: 'NoneType' object has no attribute 'coordinate'

苹果的开发者文档没有帮助我,因为我的目标-C没有那么强大。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-19 20:16:16

您应该等到locationd提示位置访问。然后允许python使用位置服务。我在代码中添加了一个等待块:

代码语言:javascript
复制
import CoreLocation
from time import sleep

manager = CoreLocation.CLLocationManager.alloc().init()
manager.delegate()
manager.startUpdatingLocation()
while CoreLocation.CLLocationManager.authorizationStatus() != 3 or manager.location() is None:
    sleep(.1)
coord = manager.location().coordinate()
lat, lon = coord.latitude, coord.longitude
print (lat, lon)

在循环等待authorizationStatus并在location中获取值时,将显示提示符。有时,显示对话框需要大约30秒:

如果用户通过选择“允许”接受访问,则authorizationStatus的值将变为3。在此之后,循环将继续等待,直到获得一个位置值。

不幸的是,有时不可能通过系统首选项中的安全和隐私部分来控制访问。由于在Location列表中消失了python行,所以不能检查或取消选中。而且,tccutil shell命令无法控制这一点。

如果您不小心选择了“不允许”按钮,则可以使用这些指令重置该按钮。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29755998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档