细分错误:11是什么意思,您该如何解决?

时间:2018-07-14 13:01:17

标签: python

我是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。

1 个答案:

答案 0 :(得分:0)

分段错误(违反)是由无效的内存引用引起的。尝试访问当前进程不应该访问的地址(也可能是缓冲区溢出或完全虚假或未初始化的指针)。通常,这表明底层代码存在错误或二进制构建(链接)过程中出现问题。

此问题不在于您的Python脚本,即使您可以通过修改python代码来触发它。即使您例如用尽了模块或解释器本身使用的缓冲区,它仍应优雅地处理这种情况。

鉴于您的脚本,geventgrequests的依赖项)或Python(和/或其标准库的某些位)很可能发生了段错误(或正在建立库)使用导致它)。也许尝试重建它们?自从构建它们以来,您的系统上它们周围有什么实质性变化?也许他们正在尝试与最初针对它们构建的库不同?

您还可以允许系统转储核心(我假设MacOS本质上是BSD可以that)并检查(转储到gdb这样的调试器中)核心转储,以查看发生了什么崩溃以及正在发生什么当时处于开启状态。