如何解决一旦我的函数被嵌套并相互引用,我的元组就会返回 NoneType 错误,为什么?
我编写了函数来调用和替换字典中的元组。所有功能都独立工作。当我单独运行它们时,元组值按计划返回整数。当按顺序运行或与其他函数嵌套时,元组返回 NoneType 错误。当我在被调用的元组上运行 type 时,它返回整数。我很困惑,想在转换为类结构来整理之前解决这个问题。
我目前的工作流程是:接受一个由以前的代码(体积)确定的整数>有条件地选择一个除数>向下舍入该值>匹配字典中的值>从字典中返回值>新元组创建>元组输入字典被替换
TypeError Traceback (most recent call last)
<ipython-input-23-1f1ae48bdda3> in <module>
----> 1 asp_master(275,dict_tuberack1,vol_tuberack1,tuberack1,'A1')
2 height_a1= get_height(dict_tuberack1,'A1')
3 asp_a(275,height_a1,tuberack1['A1'])
4 disp_master(275,'A2')
5 height_a2= get_height(dict_tuberack1,'A2')
<ipython-input-10-ba8bc2194a15> in asp_master(volume,dict_vol,dict_labware,labware,well)
1 def asp_master(volume,well):
----> 2 if low_vol_check(volume,well)==True:
3 new_vol=volume_sub(volume,well)
4 tup_update_sub(new_vol,well)
5 print(dict_labware[labware[well]])
<ipython-input-16-a23165d51020> in low_vol_check(volume,well)
10
11 def low_vol_check(volume,well):
---> 12 x=get_volume(dict_labware,well)
13 y=volume
14 if x-y < 0:
<ipython-input-16-a23165d51020> in get_volume(dict_labware,well)
1 def get_volume(dict_labware,well):
2 tup = dict_labware.get(labware[well])
----> 3 (tup_v,tup_h)=tup
4 volume=tup_v
5 return tup_v
TypeError: cannot unpack non-iterable NoneType object
机器人代码:
from opentrons import protocol_api
from opentrons.simulate import get_protocol_api
from math import floor,ceil
from datetime import datetime
import opentrons
protocol = get_protocol_api('2.8')
tuberack1 = protocol.load_labware('opentrons_15_tuberack_nest_15ml_conical','2','tuberack1')
tuberack2 = protocol.load_labware('opentrons_24_tuberack_nest_1.5ml_snapcap','3','tuberack2')
tiprack= protocol.load_labware('opentrons_96_tiprack_300ul','4')
p300 = protocol.load_instrument('p300_single','left',tip_racks=[tiprack])
p300.home
代码:
dict_tuberack1={tuberack1['A1']:(14000,104),tuberack1['A2']:(14000,tuberack1['A3']:(14000,}
vol_tuberack1= {14000: 104,13500: 101,13000: 98,12500: 94,12000: 91,11500: 88,11000: 85,10500: 81,10000: 78,9500: 75,9000: 72,8500: 68,8000: 65,7500: 62,7000: 59,6500: 55,6000: 52,5500: 49,}
def get_volume(dict_labware,well):
tup = dict_labware.get(labware[well])
(tup_v,tup_h)=tup
volume=tup_v
return tup_v
def low_vol_check(volume,well):
x=get_volume(dict_labware,well)
y=volume
if x-y < 0:
return False
else:
return True
def tup_update_sub(volume,well):
tup = dict_labware.get(labware[well])
adj_list=list(tup)
adj_list[0]=volume
divisor=1
if volume >=1000:
divisor=1000
vol_even=round_down(volume,divisor)
elif 100 <= volume <1000: #this was the issue and was fixed.
divisor=100
vol_even=round_down(volume,divisor)
else:
divisor=10
vol_even=round_down(volume,divisor)
new_height=dict_vol.get(vol_even)
adj_list[1]=new_height
new_tup=tuple(adj_list)
dict_labware[labware[well]] = new_tup
def asp_master(volume,well):
if low_vol_check(volume,well)==True:
new_vol=volume_sub(volume,well)
tup_update_sub(new_vol,well)
print(dict_labware[labware[well]])
else:
print('Cannot aspirate')
#robot commands below
def asp_a (volume,height,source):
p300.pick_up_tip()
p300.aspirate(volume,source.bottom(z=height))
def disp_a (volume,destination):
p300.dispense(volume,destination.bottom(z=height+8))
p300.blowout(height+8)
#code that generated error message below
asp_master(275,'A1')
height_a1= get_height(dict_tuberack1,'A1')
asp_a(275,tuberack1['A1'])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。