Seite 1 von 1

Bottle - Error 500

Verfasst: Mittwoch 26. Januar 2011, 15:38
von mathman
Hi,

ich taste mich nun an mehren Fronten an Bottle ran :lol:

Nach meinem kleinen Erfolg gestern Abend, indem ich Daten per Post
auf eine neue "Seite" geschaufelt habe, wollte ich heute einen Schritt weiter gehen und
mir ein paar Daten von meiner Funktion ausgeben lassen.

Dazu habe ich folgende Funktion geschrieben, die mir Betonkennwerte ausrechnet :)

Code: Alles auswählen

def bemessungsgrundlage_C(fck):
  """Funktion zum berechnen der Betonkennwerte von Normalbeton"""
  from math import log
  
  # Mittelwert der Zylinderdruckfestigkeit des Betons
  fcm = fck + 8
  
  # Mittelwert der zentrischen Zugfestigkeit des Betons
  if fck < 55:
    fctm = round(0.3 * fck**0.666666,1)
  else:
    fctm = round(2.12 * log(1+(fcm/10.)),1)
  
  # Mittlere E-Modul
  Ec0m = 9500 * (fck + 8)**(0.3333333)
  
  # mittlere Elastizitätsmodul
  alpha_i = min(0.8 + 0.2 * (fcm/88.), 1)
  
  Ecm = round(alpha_i * Ec0m,-2)
  
  # runden des mittleren E-Moduls für Ausgabe
  Ec0m = round(Ec0m,-2)
  
  # Rueckgabe als Dictionarys
  
  return {'fck':fck, 'fcm':fcm, 'fctm':fctm, 'Ec0m':Ec0m, 'Ecm':Ecm}
  #Aufruf mit bemessungsgrundlage_C(12)['fcm']
Diese befindet sich in der Datei bemessung.py

Meine Bottle Testdatei sieht dabei wie folgt aus

Code: Alles auswählen

from bottle import route, run, post, request

@route('/')
@route('/index.html')
def index():
    return""" 
     <form action="berechnung" method="post" accept-charset="UTF-8">
     <p>fck:<br><input name="fck" type="text" size="30" maxlength="30"></p>
    <input type="submit" value=" Absenden ">
    </form>
    """

@post('/berechnung')
def berechnung():

    from bemessung import bemessungsgrundlage_C
    fck = request.forms.get('fck')
    blub = bemessungsgrundlage_C(fck)['fck']

    return "fck: %s" % blub

run(host='localhost', port=8080)
Wird nun berechnung aufgerufen bekomme man einen Fehler 500 "Unhandled exception",
was läuft da denn schief ?

gruß

Re: Bottle - Error 500

Verfasst: Mittwoch 26. Januar 2011, 15:47
von Hyperion
Sollte man da nicht noch die genaue Zeile usw. ausgespuckt bekommen? Nur mit diesen Infos kommt man gezielt weiter. Also poste wenn schon den gesamten Stacktrace der Fehlermeldung.

Re: Bottle - Error 500

Verfasst: Mittwoch 26. Januar 2011, 15:49
von EyDu
Wenn ich raten müsste: fck sieht mir nach einem String aus.

Re: Bottle - Error 500

Verfasst: Mittwoch 26. Januar 2011, 17:00
von mathman
EyDu hat geschrieben:Wenn ich raten müsste: fck sieht mir nach einem String aus.
genau das wars :mrgreen:

so funktioniert es :)

Code: Alles auswählen

fck = int(request.forms.get('fck'))
Jetzt habe ich noch eine Frage, bemessungsgrundlage liefert ein Dictionary
zurück. Wenn ich jetzt mir einzeln alles ausgeben lasse möchte müsste ich das wie folgt machen:

Code: Alles auswählen

return "fck: %s, fctm %s" % (bemessungsgrundlage_C(fck)['fck'], bemessungsgrundlage_C(fck)['fctm'])
könnte ich das denn irgendwie kürzer schreiben?

Re: Bottle - Error 500

Verfasst: Mittwoch 26. Januar 2011, 17:07
von EyDu

Code: Alles auswählen

>>> "{spam} and {eggs}".format(**{"spam":"SPAM", "eggs":"EGGS"})
'SPAM and EGGS'
Edit: Und natürlich solltest du bei deiner Lösung auch prüfen, ob du den übergebenen Wert erfolgreich in einen Integer umwandeln konntest.

Re: Bottle - Error 500

Verfasst: Donnerstag 27. Januar 2011, 10:50
von mathman
EyDu hat geschrieben:

Code: Alles auswählen

>>> "{spam} and {eggs}".format(**{"spam":"SPAM", "eggs":"EGGS"})
'SPAM and EGGS'
Edit: Und natürlich solltest du bei deiner Lösung auch prüfen, ob du den übergebenen Wert erfolgreich in einen Integer umwandeln konntest.
Wie gebe ich denn dabei das Dictonary an ?

Re: Bottle - Error 500

Verfasst: Donnerstag 27. Januar 2011, 11:47
von Leonidas
mathman hat geschrieben:
EyDu hat geschrieben:

Code: Alles auswählen

>>> "{spam} and {eggs}".format(**{"spam":"SPAM", "eggs":"EGGS"})
'SPAM and EGGS'
Edit: Und natürlich solltest du bei deiner Lösung auch prüfen, ob du den übergebenen Wert erfolgreich in einen Integer umwandeln konntest.
Wie gebe ich denn dabei das Dictonary an ?
Meinst du nicht dass das offensichtlich ist? Wenn es das nicht ist, solltest du vielleicht mal das Tutorial durcharbeiten:

Code: Alles auswählen

"{spam} and {eggs}".format(**dein_dict)

Re: Bottle - Error 500

Verfasst: Donnerstag 27. Januar 2011, 13:03
von Defnull
Für die Zukunft:

Code: Alles auswählen

bottle.debug(True)
Das gibt die eine detaillierte Fehlermeldung aus.

Re: Bottle - Error 500

Verfasst: Donnerstag 27. Januar 2011, 13:52
von mathman
Leonidas hat geschrieben: Meinst du nicht dass das offensichtlich ist? Wenn es das nicht ist, solltest du vielleicht mal das Tutorial durcharbeiten:

Code: Alles auswählen

"{spam} and {eggs}".format(**dein_dict)
War leider für mich nicht offensichtlich, aber jetzt funktioniert es, vielen Dank :)
Welches Tutorial meinst du ? dieses hier ?
Defnull hat geschrieben:Für die Zukunft:

Code: Alles auswählen

bottle.debug(True)
Das gibt die eine detaillierte Fehlermeldung aus.
Super sowas hab ich schon gesucht :)

Re: Bottle - Error 500

Verfasst: Donnerstag 27. Januar 2011, 17:59
von Leonidas
mathman hat geschrieben:Welches Tutorial meinst du ? dieses hier ?
Ja das oder das englsiche Original, je nach Präferenzen.