【发布时间】:2017-11-12 11:48:21
【问题描述】:
我在 python 中的下面的代码给了我一个警告:
some_new_object['someVar'] = cd['someVar']
警告是
Expected type 'Union[Integral, slice]', got 'str' instead
代码:
def some_object():
return {
'someId': 0,
'someVar' : ''
}
def warn_test(in_list):
try:
new_list = []
some_new_object = some_object()
for cd in in_list:
if cd['someVar']:
new_list.append(cd)
for cd in new_list:
some_new_object['someVar'] = cd['someVar']
in_list.append(some_new_object.copy())
return in_list
except Exception:
print 'baaa'
#Main Program
new_obj = some_object()
new_obj['someId'] = 1
new_obj['someVar'] = 'Next'
new_obj2 = some_object()
new_obj2['someId'] = 1
new_obj2['someVar'] = None
new_list = []
new_list.append(new_obj)
new_list.append(new_obj2)
out_list = warn_test(new_list)
for obj in out_list:
print obj
如果我将函数 warn_test 更改为:
def warn_test(in_list):
try:
new_list = []
some_new_object = some_object()
for cd in in_list:
if cd['someVar']:
some_new_object['someVar'] = cd['someVar']
new_list.append(some_new_object.copy())
for cd in new_list:
in_list.append(cd)
return in_list
except Exception:
print 'baaa'
它没有给我任何警告。
有人可以帮助我了解我收到警告的原因,以及如何在第二次迭代中访问 cd['someVar'] 而不会收到警告?
我知道这段代码很奇怪,我正在做的一个项目需要它,我做了这个测试来分享这里,但它给了我同样的警告,所以这个解决方案将在我的系统中修复它。 (没有警告是该系统的必备条件之一)
【问题讨论】:
-
some_new_object是一个对象而不是字典。但是,您可以使用setattr(obj, key, value)设置属性 -
这是来自 pycharm 的警告吗?如果是这样,请准确地显示代码中的哪一行触发了警告,那么也许有人可以找出类型检查器不喜欢它的原因。
-
是的,我正在使用 pycharm。我发布了发出警告的行: some_new_object['someVar'] = cd['someVar'] 在 warnTest 方法中。那将是我发布的第一个代码块中的第 17 行。
标签: python dictionary types pycharm warnings