2017-05-16 11 views
0

ich derzeit pytesseract bin mit der eine Ausnahme-Klasse definiert wie folgt:Python Ausnahmeklasse nicht definiert ist, kein Attribut

class TesseractError(Exception): 
    def __init__(self, status, message): 
     self.status = status 
     self.message = message 
     self.args = (status, message) 

in meinem main.py ich mehrere Möglichkeiten versucht, diese Ausnahme für die Ausnahmebehandlung zu verwenden, aber ich habe keinen "TesseractError" Attributfehler und keinen "TesseractError" Fehler bekommen.

1.

>>> from pytesseract import TesseractError 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: cannot import name 'TesseractError' 

2.

>>> import pytesseract 
>>> try: raise pytesseract.TesseractError(True,"True") 
... except TesseractError: print("error") 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: module 'pytesseract' has no attribute 'TesseractError' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'TesseractError' is not defined 

3.

>>> import pytesseract 
>>> try: raise TesseractError(True,"True") 
... except TesseractError: print("error") 
... 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'TesseractError' is not defined 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'TesseractError' is not defined 

Allerdings, wenn ich die folgenden in Terminal versuchen, es funktioniert einfach.

>>> class ERR(Exception): pass 
>>> try: raise ERR() 
... except ERR: print("error found") 
error found 

so scheint es, es ist die einführende Schritt falsch ist, aber ich weiß nicht, was es verursacht.

+2

Diese Ausnahme nicht auf der obersten Ebene des Pakets ausgesetzt ist, nur 'image_to_string' ist. Wenn Sie es wollen, müssen Sie 'von pytasseract.pytesseract importieren TesseractError'. – jonrsharpe

+0

Es hat funktioniert! Wie funktioniert die Top-Level-Belichtung hier? – user14042

+0

Ich bin mir nicht sicher, was du meinst. Was direkt aus dem Paket verfügbar ist, wird durch ['__init __. Py'] (https://github.com/madmaze/pyteseract/blob/master/src/__init__.py) definiert, auf alles andere muss explizit vom Modul zugegriffen werden. – jonrsharpe

Antwort

1

Hier ist die __init__ Datei:

https://github.com/madmaze/pytesseract/blob/master/src/init.py

Beachten Sie, dass es nicht die TesseractError aus der Verpackung selbst sichtbar sein muss importiert werden. Sie könnten entweder die aus dem Paket init Datei oder importieren ändern> Modul>

from pytesseract.pytesseract import TesseractError 
+0

Beachten Sie, dass Ihr 'import *' von ['__all__' beeinflusst wird (https://github.com/madmaze/pyteseract/blob/master/src/pytesseract.py#L23). – jonrsharpe

+0

ah, sah nur, dass - sie nur image_to_string auch dort setzen:/ – JacobIRR

+0

so mein Verständnis ist, wenn ich "import pytasseract" genannt, "____init____" heißt und nur "von pytasseract import image_to_string" ausgeführt wird. Und wenn ich versuche "von pytasseract.pytasseract import TesseractError", importiere ich TesseractError-Klasse von pytasseract.py von pytasseract Ordner/Bibliothek. Ist das richtig? – user14042

Verwandte Themen