Seite 1 von 1

timedelta: OverflowError: integer multiplication

Verfasst: Donnerstag 8. Februar 2007, 15:47
von jens
Hab einen merkwürdigen Fehler:

Traceback:

Code: Alles auswählen

delta = datetime.timedelta(seconds=maxAge)
OverflowError: integer multiplication
maxAge ist dabei 604800

Ist ein CGI mit 2.3.5 (#2, Oct 16 2006, 19:19:48) [GCC 3.3.5 (Debian 1:3.3.5-13)]

Wie kann das sein? Lokal kann ich das nicht nachvollziehen, aber ich hab auch kein Python 2.3...

Verfasst: Donnerstag 8. Februar 2007, 15:59
von jens
OK, meine Lösung: ich nehme days statt die Sekunden ;)

Also so:

Code: Alles auswählen

delta = datetime.timedelta(days=7)

Verfasst: Donnerstag 8. Februar 2007, 16:13
von BlackJack
Mit 2.3.5 kann ich es auch nicht nachvollziehen:

Code: Alles auswählen

Python 2.3.5 (#2, Oct  5 2006, 22:06:14)
[GCC 4.0.3 (Ubuntu 4.0.3-1ubuntu5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> datetime.timedelta(seconds=604800)
datetime.timedelta(7)

Verfasst: Donnerstag 8. Februar 2007, 19:54
von Leonidas
BlackJack hat geschrieben:Mit 2.3.5 kann ich es auch nicht nachvollziehen:
Tritt auch unter Python 2.5 nicht auf.

Verfasst: Donnerstag 8. Februar 2007, 20:05
von mitsuhiko
Auch unter 2.4 nicht

Verfasst: Freitag 9. Februar 2007, 11:38
von jens
Ich kann es ja selber lokal auch nicht nachvollziehen. Ich glaube es liegt irgendwie am Server.

Hierbei kommt auch ein Fehler:

Code: Alles auswählen

md5pass = u'e564b583a9e21b6d2b209c775701b457'
int(md5pass, 16)
Traceback: OverflowError: string/unicode conversion
Das klappt bei mir lokal auch einwandfrei.

Der Fehler "string/unicode conversion" sieht irgendwie auch nicht wie ein normaler Python Fehler aus, oder?

Kann es sein das es eigentlich nur ein "warning" ist? Zumindest nach einer google Suche zu urteilen, könnte es so sein.

Ich habe nämlich das gemacht:

Code: Alles auswählen

warnings.filterwarnings('error',category=Warning)
Ich möchte nämlich alle MySQLdb Warnungen wirklich sehen. Kann man das auf diese Modul beschränken?
Oder aber ich packe die Warnungen in mein SQL-Logging rein. Weiß jemand wie man das machen kann?
Ein schneller Hack wäre es, alle stderr Ausgaben ins SQL-Logging umzuleiten.

Verfasst: Freitag 9. Februar 2007, 13:09
von jens
Aha! Bin ein Schritt weiter... Es liegt an den warnings: http://test.htfx.info/test.py

Wobei, lokal funktioniert es. Auf dem Server in einer console auch, aber nicht in der CGI Version :shock:

Weiß jemand warum???

Irgendwelche Apache Limits???

Verfasst: Freitag 9. Februar 2007, 13:43
von jens
Ich habe es jetzt... Wenn man alle MySQLdb Warnungen als Exceptions haben möchte, geht das so:

Code: Alles auswählen

from MySQLdb import Warning as MySQLdbWarning

warnings.filterwarnings('error',category=MySQLdbWarning)
Ich mache es allerdings nun anders... Ich biege die Warnungen (Die normalerweise wohl nach stderr gehen) in ein andere file-like-object um, so:

Code: Alles auswählen

        from MySQLdb import Warning as MySQLdbWarning

        def showwarning(message, category, filename, lineno):
            if category == MySQLdbWarning:
                self.page_msg(message, category, filename, lineno)

        warnings.showwarning = showwarning

Verfasst: Freitag 9. Februar 2007, 19:58
von birkenfeld
Du weißt aber, dass das ziemlich unsauber ist, wenn du nicht mal für andere Warnungen die ursprüngliche showwarning()-Funktion aufrufst?

Verfasst: Montag 12. Februar 2007, 09:05
von jens
Ah, das stimmt!

Doch wie mache ich das am besten??? Also wie komme ich an die Original showwarning Funktion herran?

Verfasst: Montag 12. Februar 2007, 09:06
von birkenfeld
Ist das ne Fangfrage?

Verfasst: Montag 12. Februar 2007, 09:12
von jens
Ne, das war ernst gemeint!

So könnte es gehen:

Code: Alles auswählen

old_showwarning = warnings.showwarning

def showwarning(message, category, filename, lineno):
    if category == MySQLdbWarning:
        self.page_msg(message, category, filename, lineno)
    else:
        old_showwarning(message, category, filename, lineno)

warnings.showwarning = showwarning
Wie besser machen?

Verfasst: Montag 12. Februar 2007, 11:51
von birkenfeld
Nicht nötig, das ist genau der richtige Weg.

Verfasst: Montag 12. Februar 2007, 12:01
von jens