Bottle - Error 500

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
mathman
User
Beiträge: 92
Registriert: Mittwoch 19. November 2008, 08:27
Wohnort: Magdeburg
Kontaktdaten:

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ß
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn ich raten müsste: fck sieht mir nach einem String aus.
Das Leben ist wie ein Tennisball.
Benutzeravatar
mathman
User
Beiträge: 92
Registriert: Mittwoch 19. November 2008, 08:27
Wohnort: Magdeburg
Kontaktdaten:

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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
mathman
User
Beiträge: 92
Registriert: Mittwoch 19. November 2008, 08:27
Wohnort: Magdeburg
Kontaktdaten:

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 ?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Für die Zukunft:

Code: Alles auswählen

bottle.debug(True)
Das gibt die eine detaillierte Fehlermeldung aus.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
mathman
User
Beiträge: 92
Registriert: Mittwoch 19. November 2008, 08:27
Wohnort: Magdeburg
Kontaktdaten:

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 :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mathman hat geschrieben:Welches Tutorial meinst du ? dieses hier ?
Ja das oder das englsiche Original, je nach Präferenzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten