【发布时间】:2018-11-01 21:09:36
【问题描述】:
初始化数组时出现分段错误。
我有一个读取 RFID 标签时的回调函数
IDS = []
def readTag(e):
epc = str(e.epc, 'utf-8')
if not epc in IDS:
now = datetime.datetime.now().strftime('%m/%d/%Y %H:%M:%S')
IDS.append([epc, now, "name.instrument"])
以及调用它的主函数
def main():
for x in vals:
IDS.append([vals[0], vals[1], vals[2]])
for x in IDS:
print(x[0])
r = mercury.Reader("tmr:///dev/ttyUSB0", baudrate=9600)
r.set_region("NA")
r.start_reading(readTag, on_time=1500)
input("press any key to stop reading: ")
r.stop_reading()
由于IDS.append([epc, now, "name.instrument"]) 行而发生错误。我知道,因为当我用打印调用替换它时,程序会运行得很好。我尝试对数组对象(整数)使用不同的类型,在 append 函数之外创建相同对象的数组等。出于某种原因,只是在“readTag”函数中创建一个数组会导致分段错误,如@987654324 @
有谁知道导致此错误的原因以及如何解决?另外更具体一点,readTag 函数对于前两个(只有两个)调用可以正常工作,但随后它会崩溃,并且具有 start_reading() 函数的 Reader 对象来自水星 api
【问题讨论】:
-
旁注:您似乎有列表,而不是数组。 python中有数组,但
['this']是一个列表。 -
if not epc in IDS:永远不会满足,因为它目前嵌套在另一个列表中。您想重新检查您的步骤,并确定在这里使用哪种数据结构更好。 -
同样以后只有列表会附加到
IDS,所以列表epc永远不会是in IDS。 -
@OluwafemiSule 不错。当我调试分段错误的代码时,我似乎忽略了这一点。谢谢!
-
@AndrasDeak python 新手。我很感激解释!谢谢!
标签: python segmentation-fault rfid