#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.