首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pythran中写入文本文件失败

在pythran中写入文本文件失败
EN

Stack Overflow用户
提问于 2021-01-03 22:07:57
回答 1查看 49关注 0票数 1

我正在使用pythran,一种pythran到c++编译器http://pythran.readthedocs.io/

在手册页中,TextIOWrapper

但是,试图编译这个简单的文件

文件:mylib.py

代码语言:javascript
复制
#pythran export write_test(str,bool)
#pythran export fake_write(str)

def write_test(fname,r):
    if r:
        print('writing %s'%fname)
        f = open(fname,'w')
        #write_line = f.writelines
        write_line = f.write
    else:
        print('NO FILE WILL BE WRITTEN')
        write_line = fake_write
    for i in range(10):
        write_line(str(i) + '\n')
    if r:
        f.close()

def fake_write(s):
    return 0

使用命令行

吡喃mylib.py -o mylib.so -O3 -march=native -v

消息失败:

mylib.py:9:21错误:不支持此对象的属性“写”

Pythran版本:0.9.8.post2

Python:3.8.5

使用Ubuntu 20.04.1 LTS

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-05 05:28:20

在当前版本的pythran中似乎有一个bug。它在pythran的开发版本(0.9.9.dev)中得到了修正。

与使用指向f.write函数的指针不同,我们可以定义一个不返回的lambda来完成任务并解决问题:

代码语言:javascript
复制
#pythran export write_test(str,bool)
#pythran export fake_write(str)

def write_test(fname,r):
    if r:
        print('writing %s'%fname)
        f = open(fname,'w')
        #write_line = f.writelines
        write_line = lambda s: f.write(s)
    else:
        print('NO FILE WILL BE WRITTEN')
        write_line = fake_write
    for i in range(10):
        write_line(str(i) + '\n')
    if r:
        f.close()

def fake_write(s):
    return None

这种修改是由github错误报告页面中的开发人员建议的。

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

https://stackoverflow.com/questions/65555435

复制
相关文章

相似问题

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