调用Fortran获取长度后创建指定长度列表的Python错误解决
解决Python调用Fortran获取长度后创建列表的问题
问题核心是ctypes类型变量与Python原生整数的类型差异,修正方案如下:
修正后的代码
import ctypes as ct # 获取x的长度 n = ct.c_int(0) fs(ct.byref(n)) # fs是返回目标长度的Fortran子程序 print('n: ', n.value) x = [0] * n.value # 提取ctypes变量的原生整数值来创建列表 print('x: ', x)
错误原因说明
- 第一个错误
TypeError: can't multiply sequence by non-int of type 'c_long':n是ctypes的c_int/c_long实例,并非Python原生整数,无法直接用于序列乘法操作,必须通过.value属性提取其实际存储的整数值。 - 第二个错误
TypeError: byref() argument must be a ctypes instance, not 'int':ct.byref()要求传入ctypes类型的对象,不能直接传递Python原生int,因此必须用ct.c_int(0)这类ctypes数值类型初始化n。
补充说明
如果Fortran返回的是长整型数值,可将n初始化为ct.c_long(0),同样通过.value属性获取原生整数,即可创建对应长度的列表。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

