Hilfe bei: "TypeError: 'str' object is not callable&

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Rabenschwinge
User
Beiträge: 3
Registriert: Freitag 13. März 2009, 10:16

Freitag 13. März 2009, 10:27

Hallo,

ich habe eine kleines Problem mit einem Skript, das einen Lockfile erstellen soll und wenn bereits ein Lockfil existiert stillschweigend aussteigen. Das Skript wird von cron ausgeführt und wirft mir immer solche Fehlermeldungen.

Code: Alles auswählen

Traceback (most recent call last):
File "/var/lib/booklooker/scripts/tools/fetch_backups.py", line 113, in ?
if errno == 17: exit(0)
TypeError: 'str' object is not callable 
Ich habe irgendwo FAQ gefunden in denn steht, dass der Fehler üblicherweise dann auftritt, wenn man das "str" Objekt mit einem eigenem Objekt verdeckt. Das ist aber gar nicht der Fall; eine Funktion hatte einen Parameter den ich "string" genannt hatte, aber selbst das habe ich mitlerweile geändert.

Der Fehler tritt in diesem Kontext auf:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf_8 -*-
import commands
import datetime
import os
import signal

(...)

def createLockfile(filename):
    """Tries to create the lockfile 'filename'.
    Should the file already exist this will cause an Exception."""
    fd = os.open(filename, os.O_WRONLY | os.O_CREAT |
                 os.O_EXCL | os.O_NONBLOCK, 0644)
    os.close(fd)

(...)

try:
    createLockfile(lockfilename)
except OSError, (errno, errstr):
    # "File Exists" (errno 17)errors are ok, we exit silently.
    if errno == 17: exit(0)
    else: raise
[/code]

PS: Ich verwende die in der Linux Distribution Debian (Etch) enthaltene Version 2.4.4 von Python auf den Systemen, die es ausführen und 2.5.2 aus Ubuntu (Intrepid Ibex) zum entwickeln.
Zuletzt geändert von Rabenschwinge am Freitag 13. März 2009, 10:31, insgesamt 1-mal geändert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 13. März 2009, 10:30

Hallo Rabenschwinge, willkommen im Forum,

Weil du irgendwo ``exit = "Das ist ein String"`` machst. Schau mal in deinen Quelltext.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Rabenschwinge
User
Beiträge: 3
Registriert: Freitag 13. März 2009, 10:16

Freitag 13. März 2009, 10:39

Leider nicht. Das Wort "exit" kommt nur genau zweimal im Text vor. Einmal in dem Kommentar, und einmal in der Anweisung exit(0), beide stehen da...
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Freitag 13. März 2009, 10:47

Rabenschwinge hat geschrieben:Leider nicht. Das Wort "exit" kommt nur genau zweimal im Text vor. Einmal in dem Kommentar, und einmal in der Anweisung exit(0), beide stehen da...
Mach doch mal vor deinem exit() ein print exit. Ansonsten würde ich dir exit-Funktion von sys nehmen.
Rabenschwinge
User
Beiträge: 3
Registriert: Freitag 13. März 2009, 10:16

Freitag 13. März 2009, 11:15

Danke, sys.exit aufrufen hilft. Scheint so als exit ein String ist. Und wenn man ihn ausgibt kommt: "Use Ctrl-D (i.e. EOF) to exit."
Ist ja gut gemeint und in der Python Umgebung sicherlich hilfreich (wenn auch nicht so hilfreich wie einfach auszusteigen), aber in diesem Programm sehr irritierend.

Code: Alles auswählen

>>> type(exit)
<type 'str'>
>>> print exit
Use Ctrl-D (i.e. EOF) to exit.
>>>
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 13. März 2009, 11:17

Ja, stimmt. Als helduel es angesprochen hat ist mir dann auch aufgefallen dass es um ``exit`` und nicht um ``sys.exit`` geht. :oops:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten