<p>像这样的事情怎么样:</p>
<pre><code>class SomeException(Exception):
def __init__(self, key):
self.key = key
super(SomeException, self).__init__(key)
def submit(**kargs):
for key, val in kargs.items():
if not val:
raise SomeException(key)
try:
submit(var1=1, var2=None)
except SomeException as err:
print 'No value for %s' % err.key
try:
submit(**{'var1': 1, 'var2': 2, 'var3': None})
except SomeException as err:
print 'No value for %s' % err.key
</code></pre>
<p>结果将是:</p>
<pre><code>No value for var2
No value for var3
</code></pre>
<p>这是什么伟大的是,即使你的输入改变了功能的数量仍然会工作。你知道吗</p>
<p>刚发完帖子,我就意识到我不理解这个问题,所以下面是我的答案:</p>
<pre><code> name = ['var1', 'var2', 'var3', 'var4']
val = ['val1', 'val2', 'va3l', 'val4']
for i in range(len(name)):
tmp = list(val)
tmp[i] = None
with self.assertRaises(SomeException) as err:
self.submit(**zip(name, tmp))
</code></pre>
<p>所以我有两个清单:</p>
<ul>
<li>一个输入参数的名称</li>
<li>默认值为1</li>
</ul>
<p>在for循环中,我复制默认值的列表(我们需要为其他迭代保留它)<br/>
然后我更新这个列表的一个元素并将其设置为无<br/>
然后我使用zip创建一个dict,并使用关键字参数unpacking将参数传递给函数</p>