Ich habe diesen Fehler: „Import: kann nicht importieren Namen Python“ Wie kann ich es beheben?
Frage
File "G:\Python25\Lib\site-packages\PyAMF-0.6b2-py2.5-win32.egg\pyamf\util\__init__.py", line 15, in <module>
ImportError: cannot import name python
Wie kann ich es beheben? Wenn Sie irgendwelche Informationen wissen müssen, wie dieses Problem zu beheben, kann ich erklären, einfach fragen.
Danke
Code:
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import webapp
from TottysGateway import TottysGateway
import logging
def main():
services_root = 'services'
#services = ['users.login']
#gateway = TottysGateway(services, services_root, logger=logging, debug=True)
#app = webapp.WSGIApplication([('/', gateway)], debug=True)
#run_wsgi_app(app)
if __name__ == "__main__":
main()
Code:
from pyamf.remoting.gateway.google import WebAppGateway
import logging
class TottysGateway(WebAppGateway):
def __init__(self, services_available, root_path, not_found_service, logger, debug):
# override the contructor and then call the super
self.services_available = services_available
self.root_path = root_path
self.not_found_service = not_found_service
WebAppGateway.__init__(self, {}, logger=logging, debug=True)
def getServiceRequest(self, request, target):
# override the original getServiceRequest method
try:
# try looking for the service in the services list
return WebAppGateway.getServiceRequest(self, request, target)
except:
pass
try:
# don't know what it does but is an error for now
service_func = self.router(target)
except:
if(target in self.services_available):
# only if is an available service import it's module
# so it doesn't access services that should be hidden
try:
module_path = self.root_path + '.' + target
paths = target.rsplit('.')
func_name = paths[len(paths) - 1]
import_as = '_'.join(paths) + '_' + func_name
import_string = "from "+module_path+" import "+func_name+' as service_func'
exec import_string
except:
service_func = False
if(not service_func):
# if is not found load the default not found service
module_path = self.rootPath + '.' + self.not_found_service
import_string = "from "+module_path+" import "+func_name+' as service_func'
# add the service loaded above
assign_string = "self.addService(service_func, target)"
exec assign_string
return WebAppGateway.getServiceRequest(self, request, target)
Lösung
Sie benötigen eine vollständige Rückverfolgung zu veröffentlichen. Was Sie hier zeigen, ist nicht alles, was nützlich. Ich landete ausgrub Linie 15 von pyamf / util / init Py. Der Code, den Sie geschrieben haben sollte, ist
from pyamf import python
Dies sollte nicht fehlschlagen, wenn Sie Ihre lokale Umgebung ist vermasselt.
Können Sie 'Import pyamf.util' und 'Import pyamf.python' in einer interaktiven Python-Shell? Was ist, wenn Sie Python starten, während in / tmp (unter der Annahme, dass Sie eine Datei ‚pyamf.py‘ genannt haben könnten im aktuellen Verzeichnis. Was ist eine schlechte Sache.)
= (älterer Kommentar unten) =
Fix Ihre Frage. Ich kann nicht einmal sagen, wo die Leitung 15 von util / __ init__.py sein soll. Da ich das nicht herausfinden kann, kann ich Ihre Frage nicht beantworten. Stattdessen werde ich Wege weisen darauf hin, Ihre Frage und Code zu verbessern.
Verwenden Sie zuerst die Auszeichnungssprache korrekt, so dass der gesamte Code in einem Codeblock ist. Stellen Sie sicher, haben Sie den Code betitelt, so dass wir es von util / __ init__.py und nicht eine zufällige Datei.
kennenIn der Fehlermeldung, schließen die voll Traceback, und nicht die letzten beiden Zeilen.
Stop Pars in Dingen wie "if (nicht service_func):" und verwendet einen Raum statt, so dass ihre "wenn nicht service_func:". Dies wird diskutiert in PEP 8 .
Lesen Sie die Python-Dokumentation und lernen, wie die Sprache zu verwenden. Etwas wie "func_name = Pfade [len (Pfade) - 1]" sollte "func_name = Pfade [-1]"
Erfahren Sie mehr über die import Funktion und nicht „exec“ für diesen Fall verwenden. Noch müssen Sie die "exec assign_string" brauchen - nur tun, um die "self.addService (service_func, Ziel)"