Traceback (most recent call last) Fehler

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
user1308
User
Beiträge: 5
Registriert: Donnerstag 15. September 2011, 12:33

Hallo zusammen,
Ich bin ein Python Neuling und habe folgendes problem.

Ich möchte überprüfen, ob ein string, der eine URL enthält ein "http://" am Anfang besitzt oder nicht und abhängig davon aktionen ausführen.
ich hab folgenden Code dafür geschrieben.
Allerdings bekomme ich immer einen Fehler beim ausführen des codes in der kommandozeile:

Traceback(most recent call last):
File "C:\Users\Admin\Desktop\link.py", line 14, in <module>

Hier nun der Code:

Code: Alles auswählen

# -*- coding: UTF-8 -*-

import cgi
import webbrowser

# Get a POST data.
form = cgi.FieldStorage()
link="http://www.webseite.de"

vergleich="http://"
ret=True
i=0
while i<=7:
	if vergleich[i] != link[i]:
		ret=False
	i=i+1

if ret == True:
normalerweise wird die URL über durch ein Formular übergeben.. um den code zu testen hab ich ihn in diesem beispiel per hand eingegeben, falls sich jemand wundert über das form element.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Willkommen im Forum und zu Python!

Aber bei dem Traceback fehlt der wichtige Teil.
Edit: Dein Vergleich in der Schleife ist falsch, es muss `i < 7` heissen, Python Sequenzen (Strings, Listen, ...) sind 0-indiziert.

Aber du willst das nutzen:

Code: Alles auswählen

# -*- coding: utf-8 -*-

import cgi
import webbrowser

# Get a POST data.
form = cgi.FieldStorage()
link="http://www.webseite.de"

vergleich="http://"
if link.startswith(vergleich):
Noch ein wenig Kritik zum alten Code:

* mit `len` kommst du an die Laenge eines Strings

* fuer schleifen deren Abbruchkriterium von vorneherein feststeht gibt es `for`

* boolsche Werte muss man nicht vergleichen, um zu boolschen Werten zu kommen
user1308
User
Beiträge: 5
Registriert: Donnerstag 15. September 2011, 12:33

Vielen Dank schon einmal.
Über die von dir angesprochenen Dinge bin ich schon einmal gestolpert.
Ich bau das Programm die ganze Zeit schon um. Hatte es erst mit einer for schleife in einer Funktion. Aber auch hier bekomme ich dieselbe Fehlermeldung. Wie kann ich an eine genauere Fehlerbeschreibung kommen?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das sollte so aussehen:

Code: Alles auswählen

%> python
Python 2.6.7 (r267:88850, Aug  3 2011, 11:33:52) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> link="http://www.webseite.de"
>>> 
>>> vergleich="http://"
>>> ret=True
>>> i=0
>>> while i<=7:
...    if vergleich[i] != link[i]:
...       ret=False
...    i=i+1
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: string index out of range
Edit: Bis auf die Datei-Angabe: Die stimmt, wenn man es als Skript ausfuehrt.
Zuletzt geändert von cofi am Donnerstag 15. September 2011, 13:34, insgesamt 1-mal geändert.
user1308
User
Beiträge: 5
Registriert: Donnerstag 15. September 2011, 12:33

nein, bekomme ich nicht..
wie gesagt ich starte das programm aus der kommandozeile heraus und bekomme wirklich nur einen zweizeiler anstelle des dreizeilers..
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dann solltest du ein paar mehr Angaben fallen lassen: OS, Python-Version und den kompletten Ablauf des Startens.
user1308
User
Beiträge: 5
Registriert: Donnerstag 15. September 2011, 12:33

Windows 7 32 bit
Python Version 3.2.2

Ich starte das Programm aus der Kommandozeile..
Also Windowstaste, geb dann cmd ein und navigiere dann zum Ordner der Python Datei.. Dann gebe ich den Dateinamen ein und bestätige das.

Ich hab ein ähnliches Programm geschrieben bei dem eine ID übergeben wird und anhand dieser wird anschliessend die dazugehörige pdf datei angezeigt. das funktioniert einwandfrei..
user1308
User
Beiträge: 5
Registriert: Donnerstag 15. September 2011, 12:33

Ich hab die Variablen umbenannt und es funktioniert nun..
Keine ahnung, was das für ein Fehler war.

viele grüße und danke :)
Antworten