我编写了REST,用于使用Falcon(https://falconframework.org/)生成随机数,只是为了我的学习过程。
这是API:
http "localhost:8000/random-number?min=10&max=10"这是代码:
class RandomNumber:
def on_get(self, req, resp):
"""Handles GET requests"""
if 'min' not in req.params:
raise falcon.HTTPMissingParam('min')
if 'max' not in req.params:
raise falcon.HTTPMissingParam('max')
min_n = req.params['min']
max_n = req.params['max']
if min_n.isnumeric() == False:
raise falcon.HTTPInvalidParam('min must be number', min_n)
if max_n.isnumeric() == False:
raise falcon.HTTPInvalidParam('max must be number', max_n)
min_n =int(min_n)
max_n =int(max_n)
if min_n > max_n:
raise falcon.HTTPInvalidParam('min is bigger than max', (min_n, max_n))
number = random.randint(min_n, max_n)
result = {'lowerLimit': min_n, 'higherLimit': max_n, 'number': number}
resp.media = result
api = falcon.API()
api.add_route('/random-number', RandomNumber())反馈意见很受欢迎。
发布于 2018-05-02 19:25:08
我没有很多好的建议,但我会提供一些小的想法。如果其他人给出了更好的答案,他们可以自由地加入以下内容:
KeyError,我只是索引params并捕获它,如果不可能,我会将结果转换为int,并捕获ValueError。同样,这些只是一些小建议,我真的不知道如何才能更好地完成同样的任务。
发布于 2018-05-02 19:22:29
这是一个很小的代码,但是有一些改进要做:
当你能做到时:
for c in ['min','max']:
if c not in req.params:
raise falcon.HTTPMissingParam(c)== False测试min_n.isnumeric() == False:应该是
if not min_n.isnumeric():发布于 2018-05-03 06:17:16
因为前面的答案很好,所以我只想强调一下EAFP和duck typing的概念。
当新开发人员(和经验丰富的)开发人员接触Python时,他们通常会带来来自其他语言的影响。
正如他们在前面的答案中已经说过的那样,Python具有很大的能力和方便性,可以动态地处理错误。您不需要在尝试之前检查所有东西五次,因为他们说“如果它像鸭子一样走路,那么它就必须是鸭子。”(Duck typing概念)。无论如何,使用这个概念,代码看起来更清晰,甚至更漂亮。
在你的例子中,这只是语言力量主题的一个小例子。无论您正在编写哪种语言,始终要检查使用语言的能力是否是为了您自己的利益。
在python的例子中,尝试找到pythonic的方法来做一些事情,就像Python的禅说的:
“应该有1,最好只有一种--很明显的办法。”
共享关于Duck typing/EAFP:https://youtu.be/x3v9zMX1s4s的链接
https://codereview.stackexchange.com/questions/193489
复制相似问题