我一直得到一个持久的ValueError:太多的值要解压,我不明白为什么

时间:2015-01-24 20:25:12

标签: python python-3.x

我收到此错误,我想我花了5个小时。请有人帮忙。 我最终想要从中获得价值。 是什么导致了许多价值观?这是我的字符串值还是字典本身的设置。

import ast
# -*- coding: utf-8 -*-
class MyMetric:
    def __init__(self, name):
        self.name = name

        self.metric_system = {
                         "yotta":  ("Y", str(10^24) ),
                         "zetta":  ("Z", str(10^21)),
                         "exa":    ("E", str(10^18)),
                         "peta":   ("P", str(10^15)),
                         "tera":   ("T", str(10^12)),
                         "giga":   ("G", str(10^9)),
                         "mega":   ("M", str(10^6)),
                         "kilo":   ("k", str(10^3)),
                         "hecto":  ("h", str(10^2)),
                         "deka":   ("da", str(10^1)),
                         "deci":   ("d", str(10^-1)),
                         "centi":  ("c", str(10^-2)),
                         "milli":  ("m",  str(10^-3)),
                         "micro":  ("μ", str(10^-6)),
                         "nano":   ("n", str(10^-9)), 
                         "pico":   ("p", str(10^-12)),
                         "femto":  ("f", str(10^-15)),
                         "atto":   ("a", str(10^-18)),
                         "zepto":  ("z", str(10^-21)),
                         "yocto":  ("y", str(10^-24))   
                         } 

    def __str__(self): 
        for key,val in self.metric_system:

            self.metric_name = key
            self.metric_symbol = val[0]
            self.metric_value = val[1]

            if self.name == self.metric_name:
                print  ("it is there")



me =  MyMetric("milli")  
print(me) 

2 个答案:

答案 0 :(得分:1)

通过字典循环只能为键提供。如果您想要密钥和值,请使用dict.items() method

for key, val in self.metric_system.items():

来自dict() documentation

  

iter(d)
  在字典的键上返回一个迭代器。这是iter(d.keys())的快捷方式。

for循环在内部循环的项目上使用iter()

请注意,__str__方法应该返回字符串,而不是打印它。

但是,当已经拥有密钥时,迭代字典中的所有值几乎没有意义。你可以这样做:

def __str__(self): 
    if self.name in self.metric_system:
        return "it is here"
    return "it is not here"

或使用字典查找来获取值:

def __str__(self): 
    try:
        symbol, magnitude = self.metric_system[self.name]
    except KeyError:
        return 'Unknown metric {}'.format(self.name)
    return 'Metric {} ({}, {})'.format(self.name, symbol, magnitude)

演示:

>>> print(MyMetric("milli"))
Metric milli (m, -9)
>>> print(MyMetric("foobar"))
Unknown metric foobar

答案 1 :(得分:0)

你的循环应该是

for key,val in self.metric_system.items():

这会迭代成对的(key, value)