2017-07-21 27 views
0

我想在我的Flask应用程序中获取GET参数。我想检查这个参数是否是一个整数,如果它被提交。Pythonic检查参数的方式是一个整数,如果没有参数,则设置默认值

  • 如果没有提交,我想设置一个默认值。
  • 如果它被提交,但是是无效的,我想抛出一个错误

我想出了下面的代码的工作,但似乎丑陋和unpythonic给我。什么是这样做的最pythonic方式?

@app.route('/') 
def index(): 
    page = request.args.get('page') or 0 
    try: 
     page = int(page) 
    except: 
     return abort(500) 
+0

注意' abort()'引发一个异常,'return'语句本身永远不会到达。 –

回答

3

你可以告诉request.args.get() method来测试你的类型,并设置默认:

@app.route('/') 
def index(): 
    page = request.args.get('page', type=int, default=0) 

如果类型转换失败,则使用默认值。在一个网络环境,这是一个很好的想法比提出一个500响应(这是保留的服务器错误,虽然没有提供有效的页码是一个真正的客户端错误)。

request.args.get()否则永不发生异常;如果没有设置其他默认值,则返回None。如果您必须对类型转换的异常,你被卡住你的方法,但我会返回一个400 Bad Request error code代替:

@app.route('/') 
def index(): 
    page_str = request.args.get('page', default=0) 
    try: 
     page = int(page_str) 
    except ValueError: 
     abort(400) 

abort(...)抛出一个异常,没有必要使用return那里。由于将引发异常,你可以做的4号线是整个块单独的函数:

def convert_or_400(value, type): 
    """Convert a value to the given type, or raise a 400 client error""" 
    try: 
     return type(value) 
    except ValueError: 
     abort(400) 

现在的路由变为:

@app.route('/') 
def index(): 
    page = convert_or_400(request.args.get('page', default=0), int) 
-1
def index(): 
    page = input("enter the value") 
    try: 
     if (page != ""): 
      page = int(page) 
     else:    
      page = 0 
     print("Input value..",page) 
    except: 
     print("wrong value given.Input numeric value")  
index() 

一个简单的方法

+0

这里有几个问题:问题标签为Flask,所以'input()'不适用于Web客户端。使用'或0'的原始方法明显比测试空字符串好得多,并且使'else'块冗余。做**不**使用'except'语句(OP执行相同的错误),您现在正在捕捉键盘中断,内存错误和生成器退出。这不是口袋妖怪,你不想抓住他们。捕获*只是'ValueError'异常*。 –

相关问题