Seite 1 von 2
import Fehler
Verfasst: Samstag 23. April 2005, 12:27
von matrixnet
hallo
Ich habe im sourcecode einiges geändert und komme auf diesen fehler wenn
ich turobt.py aufrufe.
Code: Alles auswählen
C:\Dokumente und Einstellungen\matador>E:\bit-tests\turbobt\turbobt.py
Traceback (most recent call last):
File "E:\bit-tests\turbobt\turbobt.py", line 7, in ?
from BitTorrent.download import Download
ImportError: cannot import name Download
Wieso kann es Download nicht importieren das weis ich nicht?
Hat jemand eine Ahnung wo der fehler steckt?
mfg
matrixnet
Verfasst: Samstag 23. April 2005, 13:48
von Leonidas
Weil es Download nicht gibt?
Re: import Fehler
Verfasst: Samstag 23. April 2005, 14:03
von jens
matrixnet hat geschrieben:from BitTorrent.download import Download
ImportError: cannot import name Download
Muß es evtl. heißen
from BitTorrent import download ???
Mit dir() kannst du nachsehen, welche Objekte zu verfügung stehen.
Also bsp.:
Verfasst: Samstag 23. April 2005, 21:35
von matrixnet
das problem mit download habe ich gelöst
mit
wie du gesat hast.
leider ist jetzt ein anders aufgetreten:
Code: Alles auswählen
Traceback (most recent call last):
File "E:\bit-tests\turbobt\turbobt.py", line 18, in ?
import chooseForm
File "E:\bit-tests\turbobt\chooseForm.py", line 6, in ?
import win32file
ImportError: No module named win32file
ich finde nirgends was mit win32file?
wo es importieren soll muss ein win32file.py geben?
mfg
matrixnet
Verfasst: Samstag 23. April 2005, 21:43
von Leonidas
matrixnet hat geschrieben:ich finde nirgends was mit win32file?
Ist wohl Teil von
pywin32 (vorher als win32all bekannt).
matrixnet hat geschrieben:wo es importieren soll muss ein win32file.py geben?
Nein, nicht unbedingt. So kann die Datei auch win32file.pyc, win32file.pyo oder auch win32file.pyd heißen.
Verfasst: Sonntag 24. April 2005, 00:28
von matrixnet
jetzt habe ich es wieder gelöst und nun wieder ein fehler
Code: Alles auswählen
Traceback (most recent call last):
File "E:\bit-tests\turbobt\turbobt.py", line 18, in ?
import chooseForm
File "E:\bit-tests\turbobt\chooseForm.py", line 8, in ?
if (sys.platform == 'win32'):
NameError: name 'sys' is not defined
ich habe doch nichts in sys geändert oder der source ist nicht richtig konfiguriert.
wozu braucht man sys?
Edit (Leonidas): Traceback in Code-Tags gesetzt.
Verfasst: Sonntag 24. April 2005, 08:10
von marco_
import sys
Außer du hast sys schon importiert, schaut aber nicht so aus.
Verfasst: Sonntag 24. April 2005, 11:29
von Leonidas
matrixnet hat geschrieben:wozu braucht man sys?
Mit sys kann man Eigenschaften des Interpreters auslesen und beeinflussen.
Verfasst: Sonntag 24. April 2005, 12:49
von matrixnet
ich habe in chooseForm
import sys
einfügt ist es richtig oder macht es kein sinn?
mein Turbobt.py sieht an anfang so aus:
jetzt kommt nur ein fehler:
Code: Alles auswählen
Traceback (most recent call last):
File "E:\bit-tests\turbobt\turbobt.py", line 23, in ?
if (sys.platform == 'win32'):
NameError: name 'sys' is not defined
Verfasst: Sonntag 24. April 2005, 14:06
von Leonidas
Also erstmal: wxPython ist von * Importen abgegangen. Du solltest besser
benutzen. Aber das nur am Rande.
Dann brauchst du um
keine Klammer, das geht auch ohne (machen eigentlich nur Quereinsteiger am Anfang):
Dann beschwart sich Python weil es kein
sys gibt. Kein Wunder: du tust ja von
sys nur
argv importieren.
Mach halt einfach statt
ein
Dann musst du zwar statt
argv sys.argv usw. schreiben, ist aber sowieso besser. Ich selbst hätte das so gemacht:
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import os, os.path, sys, threading, time, traceback, shutil, webbrowser
import wx, tbtconst, imgs, AboutForm, SetupForm, chooseForm
if sys.platform == 'win32':
import winsound
wx.EVT_INVOKE = wx.NewEventType()
Wobei ich das mit
import winsound vielleicht noch ganz anders gemacht hätte.
Verfasst: Sonntag 24. April 2005, 15:11
von matrixnet
nun habe ich es geändert so wie du es gesagt hast und nun
Code: Alles auswählen
Traceback (most recent call last):
File "E:\bit-tests\turbobt-I2P\turbobt.py", line 14, in ?
wxEVT_INVOKE = wxNewEventType()
NameError: name 'wxNewEventType' is not defined
Verfasst: Sonntag 24. April 2005, 15:48
von Leonidas
matrixnet hat geschrieben:nun habe ich es geändert so wie du es gesagt hast und nun
Code: Alles auswählen
Traceback (most recent call last):
File "E:\bit-tests\turbobt-I2P\turbobt.py", line 14, in ?
wxEVT_INVOKE = wxNewEventType()
NameError: name 'wxNewEventType' is not defined
Und wo ist da der Punkt zwischen wx und NewEventType(), so wie ich es gepostet habe? Es muss ja in dem Fall
wx.NewEventType() lauten. Und statt den Ganzen wx* Funktionen brauchst du die wx.* Funktionen, da sie ja dann im wx Namensraum sind und nicht den globalen Namensraum deines Programmes füllen.
Verfasst: Sonntag 24. April 2005, 20:42
von matrixnet
ich habe jetzt wx mit punkt ersetzt wx.
in turbobt.py
und nun habe ich das fehler:
Code: Alles auswählen
Traceback (most recent call last):
File "E:\bit-tests\turbobt\turbobt.py", line 1385, in ?
run(argv[1:])
NameError: name 'argv' is not defined
Code: Alles auswählen
def next(params, d, doneflag):
dow = Download()
d.dow = dow
d.dow.minPort=d.setting['portstart']
d.dow.maxPort=d.setting['portend']
dow.download(params, d.chooseFile, d.updateStatus, d.finished, d.error, doneflag, 100,
d.newpath)
if not d.fin:
d.failed()
def run(params):
app = MyApp(0,params)
app.MainLoop()
if __name__ == "__main__":
run(argv[1:])
2.Habe noch ein ganz anderes problem mit
download.py
im orginal code das ich eben das gleiche in mein eigenes download.py
übernehmen will ist der bereich proxy
Code: Alles auswählen
def download(params, filefunc, statusfunc, finfunc, errorfunc, doneflag, cols, pathFunc = None, paramfunc = None, spewflag = Event()):
if len(params) == 0:
errorfunc('arguments are -\n' + formatDefinitions(defaults, cols))
return
try:
config, args = parseargs(params, defaults, 0, 1)
if args:
if config.get('responsefile', None) == None:
raise ValueError, 'must have responsefile as arg or parameter, not both'
if path.isfile(args[0]):
config['responsefile'] = args[0]
else:
config['url'] = args[0]
if (config['responsefile'] == '') == (config['url'] == ''):
raise ValueError, 'need responsefile or url'
except ValueError, e:
errorfunc('error: ' + str(e) + '\nrun with no args for parameter explanations')
return
try:
if config['responsefile'] != '':
h = open(config['responsefile'], 'rb')
else:
#: use proxy
h = urlopen(config['url'], config['http_proxy'])
#/
response = h.read()
h.close()
except IOError, e:
da es etwas unterschied gibt zu dem anderen download.py
habe ich ein problem
habe den gleichen code eingesetzt aber irgendwie falsch das mir fehler ausgibt im cmd:
Code: Alles auswählen
Traceback (most recent call last):
File "E:\bit-tests\turbobt\turbobt.py", line 39, in ?
from btsession import BTSession
File "E:\bit-tests\turbobt\btsession.py", line 21, in ?
from BitTorrent.download import Download
File "E:\bit-tests\turbobt\BitTorrent\download.py", line 142
h = urlopen(config['url'], config['http_proxy'])
^
IndentationError: expected an indented block
Code: Alles auswählen
class Download:
def ParseResponseFile(self, responsefile, url=None, errorfunc=None):
try:
if responsefile and responsefile != '':
h = open(responsefile, 'rb')
elif url != None:
h = urlopen(url)
else:
#: use proxy
h = urlopen(config['url'], config['http_proxy'])
#/
response = h.read()
h.close()
except IOError, e:
if responsefile != '' and responsefile.find('Temporary Internet Files') != -1:
if errorfunc != None:
da muss irgendwie das anders machen oder das es geht?
Verfasst: Sonntag 24. April 2005, 23:06
von BlackJack
Ich habe den Eindruck, dass Du zwar die Vorschläge hier immer in Deinen Quelltext einbaust, aber nicht so ganz verstanden hast, wie das mit den Modulen bzw. Namensräumen in Python funktioniert. Du solltest zumindest das Tutorial in der Python-Dokumentation mal durchgehen um einen Überblick über die Sprache zu bekommen.
Und dann kannst Du anstelle der Schnappschüsse von Deinem Texteditor auch den Quelltext als Text kopieren. Wenn Du ihn in (python) und (/python) mit eckigen statt der runden Klammern einfasst, dann gibt's sogar Syntaxhighlighting:
Verfasst: Montag 25. April 2005, 12:21
von Leonidas
Da hat BlackJack Recht. Du hast ja am Anfang from sys import argv gemacht. Das heißt, du hast aus dem Namensraum des sys-Modules argv in den Namensraum deines Programmes. Aber nun da du einfach nur den Namensraum sys in dein Programm importierst, musst du mit angeben wo argv zu finden ist, nämlich in sys. Also schreibst du sys.argv.
Verfasst: Montag 25. April 2005, 18:18
von matrixnet
danke das habe ich jetzt verstanden
nun das download.py macht mir kopfzerbrechen?
Verfasst: Montag 25. April 2005, 18:56
von Leonidas
matrixnet hat geschrieben:nun das download.py macht mir kopfzerbrechen?
Du hast die Einrückung nach
else: falsch.
Verfasst: Montag 25. April 2005, 19:46
von matrixnet
das weis ich das es falsch ist.
nun muss ich so schreiben das es zum gleichen ergebnis führt.
das nicht falsch ist.
aber wie?
entweder for else: oder nach else:?
Verfasst: Montag 25. April 2005, 20:44
von matrixnet
mit einer einrückung ist der fehler behoben!
aber wird die function auch funtionieren?
Verfasst: Dienstag 26. April 2005, 13:06
von Leonidas
Wenn sie bei dir funktioniert, dann funktioniert es wohl.