【问题标题】:Python Warning - Expected type 'Union[Integral, slice]', got 'str' insteadPython 警告 - 预期类型 'Union[Integral, slice]',改为 'str'
【发布时间】: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


【解决方案1】:

迟到总比没有好。

一般来说,我发现如果变量/方法返回是强类型的,这些警告就会消失。

【讨论】:

  • 方法之类的东西:def the_method(self, file_path: str) -> (list, list, int, int): 变量之类的东西:list_a: list = [], the_number: int 等。 ..
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2015-08-16
  • 2016-01-27
  • 2021-11-07
  • 2020-07-21
  • 1970-01-01
相关资源
最近更新 更多