2016-11-03 114 views
0

此代码一直给我的错误:在python中选择默认参数值?

类型错误:“NoneType”对象有没有属性“的GetItem

class d_exposure(object): 
    def __init__(self): 
     self.files = glob.glob('C:\files') 
    def exposure(self,level): 
     level = inspect.getargspec(d_exposure().exposure)[3][0] 
     print level 
def main(): 
    mp = d_exposure() 
    mp.exposure(level = 'MID') 

看来,问题是,它要对水平的默认值。但是,追溯显示它正在获取价值。

Traceback (most recent call last): 
    File "C:\Users\Documents\my_scripts\exposure.py", line 58, in <module> 
main() 
    File "C:\Users\Documents\my_scripts\exposure.py", line 54, in main 
mp.exposure(level = 'MID') 
    File "C:\Users\Documents\my_scripts\exposure.py", line 17, in exposure 
level = inspect.getargspec(d_exposure().exposure)[3][0] 

当我尝试给它的默认值“DIM”,则输出具有“DIM”,即使我提出的要求是mp.exposure(水平=“MID”)。有人能帮我弄清楚我做错了什么吗?

+3

此代码没有任何意义。如果您传递的是“level”值,请直接使用它。没有任何内省需要。您可能会混淆传递关键字参数的语法来声明默认参数值的语法吗? – Blckknght

+0

是的,这显然是从整个代码简化,但想法是,我得到一个错误,因为它想要一个级别的默认参数,但我想能够调用不同类型的'水平'的函数 – boson

+1

我想我的观点是:你为什么使用这行代码?如果你用'inspect.getargspec'删除整行,我怀疑它会做你想做的。如果你想'level'成为一个可选的参数,你可以使用'def exposure(self,level =“DIM”):'。 – Blckknght

回答

1
inspect.getargspec(d_exposure().exposure) 

这条线为您提供以下的输出:

ArgSpec(args=['self', 'level'], varargs=None, keywords=None,   defaults=None) 

在最后一项是无,在其试图通过访问第0个元素调用的GetItem方法。 当默认为'DIM'时,getargspec方法输出中的最后一个值是['DIM'],因此它会给出'DIM'作为答案。

当你这样做的主要方法:

mp.exposure(level = 'MID') 

你给MID作为参数,而不是默认值。默认值只能在函数定义期间给出。 你没有清楚地说明你想要做什么,所以我不能给你提供什么意见。

+0

哦,我看到我不应该使用[3] [0],因为它对应于默认参数,好吧,这是有道理的。谢谢! – boson