我是Python的新手,遇到了真正的麻烦,因为我遇到了以下细分错误:11错误。
这是一个简单的代码示例,每次都会产生此错误:
import grequests
class Url(object):
pass
a = Url()
a.url = 'http://www.heroku.com'
a.result = 0
b = Url()
b.url = 'http://www.google.com'
b.result = 0
c = Url()
c.url = 'http://www.wordpress.com'
c.result = 0
urls = [a, b, c]
rs = (grequests.get(u.url) for i, u in enumerate(urls))
grequests.map(rs)
绝对奇怪的是,如果我用以下代码替换urls = ...行:
urls = [a, b]
然后我没有任何错误,脚本运行正常。
如果我将其更改为
urls = [c]
然后我也没有收到任何错误,脚本运行正常。
如果我将c.url = ...更改为
c.url = "http://yahoo.com"
然后将网址= ...恢复为
urls = [a, b, c]
然后我确实遇到了细分错误:11个错误。
虽然我不确定如何解决它,但是内存问题似乎是一种可能。
我已经坚持了好几天,因此,无论有多小帮助,我们将不胜感激。
作为参考,我使用的是macOS High Sierra(10.13.5),并使用Brew安装了Python 3.7.0。
答案 0 :(得分:0)
分段错误(违反)是由无效的内存引用引起的。尝试访问当前进程不应该访问的地址(也可能是缓冲区溢出或完全虚假或未初始化的指针)。通常,这表明底层代码存在错误或二进制构建(链接)过程中出现问题。
此问题不在于您的Python脚本,即使您可以通过修改python代码来触发它。即使您例如用尽了模块或解释器本身使用的缓冲区,它仍应优雅地处理这种情况。
鉴于您的脚本,gevent
(grequests
的依赖项)或Python(和/或其标准库的某些位)很可能发生了段错误(或正在建立库)使用导致它)。也许尝试重建它们?自从构建它们以来,您的系统上它们周围有什么实质性变化?也许他们正在尝试与最初针对它们构建的库不同?
您还可以允许系统转储核心(我假设MacOS本质上是BSD可以that)并检查(转储到gdb这样的调试器中)核心转储,以查看发生了什么崩溃以及正在发生什么当时处于开启状态。