import 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.
matrixnet
User
Beiträge: 35
Registriert: Donnerstag 21. April 2005, 16:45

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

Weil es Download nicht gibt?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.:

Code: Alles auswählen

import BitTorrent
for i in dir(BitTorrent): print i

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
matrixnet
User
Beiträge: 35
Registriert: Donnerstag 21. April 2005, 16:45

das problem mit download habe ich gelöst

mit

Code: Alles auswählen

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

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
matrixnet
User
Beiträge: 35
Registriert: Donnerstag 21. April 2005, 16:45

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.
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

import sys
Außer du hast sys schon importiert, schaut aber nicht so aus.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

matrixnet hat geschrieben:wozu braucht man sys?
Mit sys kann man Eigenschaften des Interpreters auslesen und beeinflussen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
matrixnet
User
Beiträge: 35
Registriert: Donnerstag 21. April 2005, 16:45

ich habe in chooseForm

import sys

Bild
einfügt ist es richtig oder macht es kein sinn?

mein Turbobt.py sieht an anfang so aus:
Bild


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

Also erstmal: wxPython ist von * Importen abgegangen. Du solltest besser

Code: Alles auswählen

import wx
benutzen. Aber das nur am Rande.

Dann brauchst du um

Code: Alles auswählen

if (sys.platform == 'win32'):
    import win32file
keine Klammer, das geht auch ohne (machen eigentlich nur Quereinsteiger am Anfang):

Code: Alles auswählen

if sys.platform == 'win32':
    import win32file
Dann beschwart sich Python weil es kein sys gibt. Kein Wunder: du tust ja von sys nur argv importieren.
Mach halt einfach statt

Code: Alles auswählen

form sys import argv, stdout
ein

Code: Alles auswählen

import sys
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
matrixnet
User
Beiträge: 35
Registriert: Donnerstag 21. April 2005, 16:45

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


Bild
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
matrixnet
User
Beiträge: 35
Registriert: Donnerstag 21. April 2005, 16:45

ich habe jetzt wx mit punkt ersetzt wx.
in turbobt.py

Bild

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?
Zuletzt geändert von matrixnet am Montag 25. April 2005, 11:55, insgesamt 3-mal geändert.
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:

Code: Alles auswählen

def spam(arg):
    print arg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
matrixnet
User
Beiträge: 35
Registriert: Donnerstag 21. April 2005, 16:45

danke das habe ich jetzt verstanden

nun das download.py macht mir kopfzerbrechen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

matrixnet hat geschrieben:nun das download.py macht mir kopfzerbrechen?
Du hast die Einrückung nach else: falsch.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
matrixnet
User
Beiträge: 35
Registriert: Donnerstag 21. April 2005, 16:45

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?

Code: Alles auswählen

h = urlopen(config['url'], config['http_proxy'])
entweder for else: oder nach else:?
matrixnet
User
Beiträge: 35
Registriert: Donnerstag 21. April 2005, 16:45

mit einer einrückung ist der fehler behoben!

aber wird die function auch funtionieren?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn sie bei dir funktioniert, dann funktioniert es wohl.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten