如何在python中检查输入是字符串还是unicode

时间:2017-11-20 14:38:12

标签: python python-3.x api unicode python-unicode

如何在python API程序中检查某些输入是字符串还是unicode:

# POST: Add new item to data
# E.G. '{"title":"Read a book", "description":"Reading..."}'
@app.route('/todo/api/v1.0/tasks', methods=['POST'])
    def create_task():
        if not request.json or not 'title' in request.json:
            abort(400)
        if 'title' in request.json and type(request.json['title']) != str:
            abort(400)
        if 'description' in request.json and type(request.json['description']) is not str:
            abort(400)
       task = {
            'id': tasks[-1]['id'] + 1,
            'title': request.json['title'],
            'description': request.json.get('description', ""),
            'done': False
        }
        tasks.append(task)
        return jsonify({'task': [make_public_task(task)]}), 201

必须改变的代码必须是这一点:

if 'title' in request.json and type(request.json['title']) != str:

if 'description' in request.json and type(request.json['description']) is not str:

我试过

not in [str, unicode]:

但这没效果。

有什么想法吗?非常感谢提前。

2 个答案:

答案 0 :(得分:1)

您可以按如下方式查看:

if isintance(request.json.get('title'), basestring):
    ...

basestring是Python 2.7中str和ucicode的常见祖先。通过使用get而不是[]运算符,您甚至可以删除'title' in request.json检查

答案 1 :(得分:0)

  

如何在python API程序中检查某些输入是字符串还是unicode:

无需检查

你在Python 3中写作,所以首先没有这样的区别 - unicode不再存在。您只有一种字符串(str),并且您有字节缓冲区(bytes),而您的问题bytes甚至不相关。

看起来你正在使用Flask? Flask内部负责解码网络请求。当您询问request.json时,Flask已经在内部使用适当的编码对请求进行了解码,并为您提供了一个很好的表示:

  • json对象的类型为dict
  • json数组的类型为list
  • json字符串的类型为str(我重复一遍 - 已为您解码)
  • json数字类型为int
  • json nulls是None

请参阅?没有bytes,现在不用担心。在处理文件内容等原始数据时,您需要担心bytes