2016-08-08 35 views
-1

ich mit Flask spielte es besser zu verstehen. Ich habe eine einfache App, die eine große Datenbank abfragt und ein zufälliges Element zurückgibt. Der folgende Code funktioniert nicht, aber ich weiß genau, wo er fehlschlägt. Es schlägt fehl, wenn ich random.randint() ein zufälliges Element in der Liste erhalten kann. In meinen Protokollen wird jedoch kein Fehler angezeigt. Was ist die Ursache dafür? Es funktioniert, wenn ich einen hardcoded Wert anstelle eines zufälligen Int. Benutze. Ich benutze Curl, um es zu testen. Ich schnippte den Datenbankcode, wie es scheint, richtig zu sein.Verwendung von random.randint in Flask

from flask import Flask, render_template, request 
import sqlite3 
import random 
app = Flask(__name__) 
def show_home_page(): 
    return render_template("home.html") 

def get_random_element(): 
    # <snipped>: Do some sql queries and populate a list called P_LIST 
    r = random.randint(0, len(P_LIST)) # This line silently fails. 
    r_e = P_LIST[r] # Never seems to get here 
    print "get_random_element", r_e # Never prints this line!! 
    return r_e 

@app.route('/') 
def server(): 
    return show_home_page() 

@app.route('/element', methods=['POST', 'GET']) 
def random(): 
    if request.method == 'GET': 
     p = request.args.get('q', '') 
     print "Request:", p 
     if p == 'random' or p == '': 
      p = get_random_element() 
      print "Random element:", p 
     else: 
      print "Else:", p 
     return render_template('random.html', element=p) 
    return show_home_page() 

if __name__ == '__main__': 
    app.run() 
+0

Überprüfen Sie die [Dokumentation] (https://docs.python.org/3/library/random.html#random.randint) für 'random.randint'. Es tut nicht, was Sie zu tun scheinen. – user2357112

+0

Didnt bekommen es .. Der Doc sagt: "Gibt eine zufällige ganze Zahl N, so dass a <= N <= b. Alias ​​für Randrange (a, b + 1)." Das ist was ich will .. Ich suche nach einem zufälligen Index in meiner Liste (P_LIST). Also random.randint (0, len (P_LIST)). – user3079275

+0

Was sind die gültigen Indizes für Ihre Liste? Was sind die möglichen Ausgaben von 'random.randint (0, len (P_LIST))'? Es gibt eine Diskrepanz. – user2357112

Antwort

0

Es ist etwas, was ich nicht verstehe, aber hier ist, was passiert. Ich muss zufällig in die random() -Funktion importieren. Ansonsten scheint die globale "import random" -Anweisung nicht ausreichend zu sein. Nicht sicher warum. Das Hinzufügen einer Importzeile innerhalb von random() hat also funktioniert. Wenn jemand das erklären kann, wäre ich dankbar.

EDIT: Jetzt verstehe ich, was los ist. Der Funktionsname random() verursachte eine Art von Konflikt. Wenn ich es in rand() ändere, funktioniert jetzt alles mit nur einem globalen Import.

+1

Sie Ihre Methode 'random' genannt, die die' random' Modul shadows Sie importiert –

0

Sie haben random neu definiert random() eine Funktion namens durch die Definition.

@app.route('/element', methods=['POST', 'GET']) 
def random(): 
    ... 

Diese Schatten das importierte Modul, das Problem verursacht, die Sie sehen. Wenn Sie import random wieder in get_random_element() Ihr Code kann Modulrandom statt der lokalen Funktion random() zugreifen.

Beheben Sie dies, indem Sie die Funktion umbenennen, vielleicht element(), da dies der Name der Route ist.