ошибка записи текстовых файлов в pythran

#python #io #write #pythran

#python #pythran

Вопрос:

Я работаю с pythran, компилятором Python для c http://pythran.readthedocs.io /

На своей странице руководства pythran сообщает, что поддерживает метод write из TextIOWrapper

Однако попытка скомпилировать этот простой файл

файл: 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 -о mylib.so -O3 -март=родной -v

сбой с сообщением:

ошибка mylib.py:9:21: неподдерживаемый атрибут ‘write’ для этого объекта

Версия Pythran: 0.9.8.post2

Версия Python: 3.8.5

Использование Ubuntu 20.04.1 LTS

Ответ №1:

Похоже, в текущей версии pythran есть ошибка. Это было исправлено в версии pythran для разработки (0.9.9.dev).

Вместо того чтобы использовать указатель на f.write функцию, мы можем определить a 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.