【发布时间】:2021-03-10 22:05:26
【问题描述】:
我遇到了一个错误,告诉我我的字典对象不可调用,我想在联系 API 开发人员之前确保我正确引用了所有内容。目前正在为 Opentrons OT2 机器人编码。
我的项目是将管中的体积与告诉机器人设置高度的值相关联。字典 (dict_15ml_50ml) 以 API 开发人员推荐的格式编写。 代码遵循以下模式: 体积集> 增加或减少体积> 取整体积> 参考体积到 vol_15ml_starstedt> 创建具有调整体积和新高度的元组> 用新元组替换 dict_15ml_50ml 中的旧元组。
当我在 jupyter 中运行它时,我收到错误消息,指出 dict 对象不可调用。
import opentrons
from opentrons import protocol_api
from opentrons.simulate import get_protocol_api
import math
from datetime import datetime
from math import floor
protocol = get_protocol_api('2.8')
tuberack= protocol.load_labware('opentrons_15_tuberack_nest_15ml_conical','2','tuberack')
tiprack= protocol.load_labware('opentrons_96_tiprack_300ul','4')
instrument = protocol.load_instrument('p300_single', 'left')
instrument.home
vol_15ml_starstedt= {14000: 104, 13500: 101, 13000: 98, 12500: 94, 12000: 91, 11500: 88, 11000: 85, 10500: 81,
}
dict_15ml_50ml={
tuberack['A1']:(15000,95), tuberack['A2']:(15000,95),
}
dict_tuberack= dict_15ml_50ml
def get_volume(dict_labware,well):
tup = dict_labware.get(tuberack[well])
return tup[0]
def get_height(dict_labware,well):
tup = dict_labware.get(tuberack[well])
return tup[1]
def volume_add(volume,dict_labware,well):
tup = dict_labware.get(tuberack[well])
volume1 = tup[0]
volume2 = volume
adj_volume = volume1+volume2
adj_list=list(tup)
adj_list[0]=(adj_volume)
tup=tuple(adj_list)
return tup[0]
def volume_sub(volume,dict_labware,well):
tup = dict_labware.get(tuberack[well])
volume1 = tup[0]
volume2 = volume
adj_volume = volume1-volume2
adj_list=list(tup)
adj_list[0]=(adj_volume)
tup=tuple(adj_list)
return tup[0]
def tup_update(volume,dict_vol,dict_labware,well):
tup = dict_labware.get(tuberack[well])
adj_list=list(tup)
adj_list[0]=volume
divisor=1
if volume >=1000:
divisor=1000
elif volume <1000 >= 100:
divisor=100
else:
divisor = 10
def round_down(volume,divisor):
vol_even=floor(volume/divisor)*divisor
return vol_even
vol_even=round_down(volume,divisor)
new_height=dict_vol.get(vol_even)
adj_list[1]=new_height
new_tup=tuple(adj_list)
target=dict_labware(tuberack[well])
target.update(new_tup)
x=volume_sub(2000,dict_tuberack,'A1')
tup_update(x,vol_15ml_starstedt,dict_tuberack,'A1')
print(dict_tuberack(tuberack['A1']))
【问题讨论】:
-
dict_labware(tuberack[well])和其他类似的实例将字典视为一个函数。你是说dict_labware[tuberack[well]],还是dict_labware.get(tuberack[well])? -
@Carcigenicate 密钥必须被引用为 tuberack['A1'] 因为 tuberack 是一个与机器人对话的函数。
-
您正确引用了
tuberack的密钥。问题在于您如何引用dict_labware的密钥。应该是[],而不是()。 -
@Carcigenicate 好的,所以我在 def tup_update 下修复了该引用。现在它告诉我元组对象没有属性更新
-
@Barmar 你是对的,它修复了当前的错误。现在它告诉我元组对象没有属性更新
标签: python python-3.x dictionary tuples