Python 3.5崩溃与异常代码:Windows 7上的c0000005

时间:2015-11-22 20:42:01

标签: python python-3.5

编辑:我有另一个随机错误弹出,我在命令提示符下成功捕获,这次指向第69行 - 分段错误调用不同字典中的元组长度是否等于数字....

我有一个长期运行(最多一周)的脚本,我设计用于测试不同结构的SQLlite3插入时间。不幸的是,脚本间歇性地崩溃python而没有向python GUI输出错误消息,下面是windows在'python已停止工作'窗口中给出的错误消息;

完整的错误消息:

Problem Event Name: APPCRASH
  Application Name: pythonw.exe
  Application Version:  3.5.150.1013
  Application Timestamp:    55f4dccb
  Fault Module Name:    python35.dll
  Fault Module Version: 3.5.150.1013
  Fault Module Timestamp:   55f4dcbb
  Exception Code:   c0000005
  Exception Offset: 000e800e
  OS Version:   6.1.7601.2.1.0.768.3
  Locale ID:    2057
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

Script I was running (warning, 1.5k lines...)

通过观察已打印和未打印的内容,我知道它是由此引起的,或者至少在此时巧合地发生,使用以下代码(从链接上的第1450行开始):

with open(r"C:\BMRA\LOG\less tbl log.csv",'a') as log:
   log.write(my_date.strftime("%Y-%m-%d"))
   log.write(", ")
   seconds=sql_time.seconds
   log.write(str(seconds))
   log.write("\n")
item_collector=[]       

Log csv文件似乎写得很好,所以我的假设是错误必须位于最后一行。

Item_collector是一个(大的,~700mb)元组列表的字典,它刚刚被写入sqllite3数据库(仅包含str,int或float的元组)。

据我所知,错误是指一个应用程序写入内存它不应该和Windows因此关闭所有内容以阻止它搞砸了。但是,我不知道如何更改充满其他vanilla python对象的普通vanilla python对象应该会产生这样的错误。

有没有人对什么可以支持这一点有任何想法,或者是否有方法来解决这个问题,因为python没有给出指向特定问题的错误消息?在上一个问题之后,我在我的脚本下面实现了一个日志记录模块包装器,但它没有捕获任何内容

一些初步的研究表明,在关闭流程之前,我从任务管理器获得了一个小型转储 - 我有它,但是调试还没有成功 - 显然我需要一些名为python35.pdb的东西,据我所知out不在(适用于3.5)

The script recently had a similar problem before which gave a similar error message

我收到的建议是在脚本周围实现日志记录模块:

import logging

logging.basicConfig(filename=r'C:\BMRA\ERROR_LOG.log', level=logging.DEBUG)

try:
    main()                   
except BaseException:
    logging.getLogger(__name__).exception("Program terminated")
    raise

def logging_decorator(func):
    def wrapper_function(self, *args, **kwargs):
        logging.getLogger(__name__).debug(
            "Calling %s: %r %r", func.__name__, args, kwargs)
        ret = func(self, *args, **kwargs)
        logging.getLogger(__name__).debug(
            "%s returned %r", func.__name__, ret)
        return ret
    return wrapper_function


class MyConnect(sqlite3.Connection):
    def cursor(self):
        return super(MyConnect, self).cursor(MyCursor)

    commit = logging_decorator(sqlite3.Connection.commit)


class MyCursor(sqlite3.Cursor):
    execute = logging_decorator(sqlite3.Cursor.execute)

然而,这似乎没有发现错误,脚本仍然崩溃而没有向指定文件发送任何信息。

如果我没有提供必要的内容,请道歉。

1 个答案:

答案 0 :(得分:1)

第50次脚本在一个随机的地方莫名其妙地崩溃后,我运行了Windows内存诊断工具。

不幸的是,我的系统似乎有ram / hardware错误,据我所知会导致这样的问题。