0

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

在其手册页中,pythran 说它支持writeTextIOWrapper

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

文件:mylib.py

#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

使用命令行

pythran mylib.py -o mylib.so -O3 -march=native -v

失败并显示以下消息:

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

Pythran 版本:0.9.8.post2

蟒蛇版本:3.8.5

使用 Ubuntu 20.04.1 LTS

4

1 回答 1

0

当前版本的 pythran 似乎存在错误。它已在 pythran (0.9.9.dev) 的开发版本中得到修复。

除了使用指向f.write函数的指针,我们可以定义一个lambda没有返回的函数来完成这项工作并解决问题:

#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 错误报告页面中建议了此修改。

于 2021-01-05T05:28:20.927 回答