我试图在字典中查找值,检查它们是否符合条件(高于数字限制),并删除key:value pair 从字典里。这在空闲Shell和Bash中可以正常工作,但是一旦我转换文件并尝试作为可执行文件运行,就会卡住并抛出一个错误代码,指出字符串不能转换为float。程序启动,但在其中一个字典上调用“限制器”时挂断
我尝试过pyinstaller并将.py改为.command(mac)(chmod+x file.command,尝试过使用int()
#brings str1 and str2 into single dictionary
def dictionizer(str1, str2):
str1 = str1.strip().split('\n')
str2 = str2.split('\n')
str2 = filter(None, str2)
d = dict(zip(str1, str2))
return d
##brings dicitionaries together
def merge(d1, d2):
merged = d1.copy()
merged.update(d2)
return merged
#synthesizes list of strings into dictionaries
d_burgers = dictionizer(burgers, burgers_kcal)
d_breakfast = dictionizer(breakfast, breakfast_kcal)
d_chicken = dictionizer(chicken, chicken_kcal)
d_salad = dictionizer(salad, salad_kcal)
d_fries = dictionizer(fries, fries_kcal)
#creates finds all values above/below limit, removes qualifying key:value pairs
def limiter(d):
for k,v in list(d.items()):
if float(v) >= b_limit + 100:
del d[k]
if float(v) <= b_limit - 50:
del d[k]
return d
#asks for a kcal limit, divides that limit arbitrarily, creates limits for all meals
print('What is your kcal limit for the day?')
limit = float(input())
b_limit = limit*0.30
l_limit = limit*0.35
d_limit = limit*0.35
#sets the original dict to the limited dict
d_breakfast = limiter(d_breakfast)
d_burgers = limiter(d_burgers)
d_chicken = limiter(d_chicken)
d_salad = limiter(d_salad)
Traceback (most recent call last):
File "/Users/********/Desktop/*****/setup.command", line 68, in <module>
d_breakfast = limiter(d_breakfast)
File "/Users/*******/Desktop/*****/setup.command", line 54, in limiter
if float(v) >= b_limit + 100:
ValueError: could not convert string to float:
logout
我想我找到了一些更好的解决方案,至少可以减少可能阻碍转换的因素。现在它很明确地不会在一个看起来应该的点上转换:
def dictionizer(str1, str2):
str1 = str1.strip().split('\n')
str2 = str2.replace('\n', ',').split(',')
str2 = list(filter(None, str2))
str2 = [float(i) for i in str2] d = dict(zip(str1, str2))
return d
仍然得到: str2=[str2中i的浮点(i)] ValueError:无法将字符串转换为浮点值:
为什么它不能将str2中的所有内容都转换成浮点呢?尝试整数,获取: str2=[int(i)表示str2中的i] ValueError:基数为10的int()的文本无效:“”
尝试在函数:limiter中打印v,就在if条件之前。转换为启用控制台的.exe文件。检查v值
错误说明值v是字符串,无法转换为标志
有些词典的值不一致
相关问题 更多 >
编程相关推荐