【问题标题】:isinstance not working as expected with string enum [duplicate]isinstance 无法使用字符串枚举按预期工作 [重复]
【发布时间】:2021-02-24 21:51:59
【问题描述】:

我试图弄清楚为什么isinstance 似乎对我不起作用。是因为我使用的是字符串还是发布数据格式错误(我将其打印到输出,它看起来正确)

class Dogs(enum.Enum):
    poodle= 'poodle'
    terrier= 'terrier'

@blueprint.route('/test/<int:test_id>', methods=['post'])
def test(int:test_id):
    data = request.json
    print(data) #it's poodle
    if isinstance(data, Dog):        
        return HTTPStatus.OK

return HTTPStatus.BAD_REQUEST

【问题讨论】:

  • 这是因为您使用的是字符串。 data 的类型是 str,而不是 Dog。您可能想改用this method 来检查枚举是否包含您想要的值。
  • 旁注:你的枚举类被命名为Dogs,你的测试是针对Dog的。复制时打错字?还是实际代码中的错误?

标签: python


【解决方案1】:

您的变量 data 是一个字符串对象 - 它不是 Dogs 类的对象实例,这就是为什么无论 data 变量中有什么,isinstance 都会返回 false 的原因。像这样的东西应该可以代替 isinstance:

# if isinstance(data, Dog):    
if data in Dogs.__members__:

【讨论】:

    【解决方案2】:

    我最终使用了 try-catch 块。

       try:
         Dogs(data)
       except ValueError:
         return HTTPStatus.BAD_REQUEST
     return HTTPStatus.BAD_REQUEST
    

    我认为这是一个糟糕的答案,但它确实有效。

    【讨论】:

      猜你喜欢
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2018-08-31
      相关资源
      最近更新 更多