首页 > 解决方案 > 为什么 python 在使用 csv.writer 和 QUOTE_NONNUMERIC 时会崩溃

问题描述

当我使用在 python 3.7 中创建一个 csv 文件时csv.writercsv.QUOTE_NONNUMERICpython 崩溃并显示消息

python: Objects/typeobject.c:3117: _PyType_Lookup: Assertion `!PyErr_Occurred()' failed.
Aborted (core dumped)

这发生在 python 3.7.4 和 3.7.3 但不是 3.6.9。如果我不通过就不会发生csv.QUOTE_NONUMERIC

所有版本的 python 都是在 Linux Mint 19 上同时编译的。

由于我在网上找不到对此问题的任何引用,我认为这不是 python 或 csv 中的错误。似乎我在编译 python 时丢失了一个依赖项,但是我从来没有能够提交完整的依赖项列表,所以我不确定我可能会丢失什么。

重现步骤:

import csv
with open('tmp.csv', 'w') as f:
 csv.writer(f, csv.QUOTE_NONNUMERIC)

标签: pythonpython-3.7

解决方案


引用应该作为关键字而不是位置参数传递给 csv.writer。

import csv
with open('tmp.csv', 'w') as f:
    csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)

否则,它被传递给dialect参数,该参数需要一个字符串,该字符串用于选择csv.Dialect用于格式化输出的子类。正如我相信它csv.QUOTE_NONNUMERICint传递给 c 模块 _csv 中的函数并导致低级错误。


推荐阅读