2016-07-27 6 views
0

Ich habe versucht, diesen Code dies ist der Fehler Datei "C:/hari/Lehre/Python/py Programme/gui qt4/Buch/calculator.py" zu laufen, Zeile 27, in updateUI text = Unicode (self.lineedit.text() 'UTF-8') Nameerror: name 'Unicode' ist nicht definiertName Unicode nicht python3 definiert

der Code:

from __future__ import division 
from math import * 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
import sys 

class Form(QDialog): 
    def __init__(self,parent =None): 
    super(Form,self).__init__(parent) 
    self.browser =QTextBrowser() 
    self.lineedit =QLineEdit("type an exp") 
    self.lineedit.selectAll() 
    layout=QVBoxLayout() 
    layout.addWidget(self.browser) 
    layout.addWidget(self.lineedit) 
    self.setLayout(layout) 
    self.lineedit.setFocus() 
    self.connect(self.lineedit, SIGNAL("returnPressed()"), self.updateUi) 
    self.setWindowTitle("Calculate") 
def updateUi(self): 
    try: 
     text = unicode(self.lineedit.text()) 
     print(type(text)) 
     self.browser.append(text+" = <b>"+eval(text)+"</b>") 

    except: 
     self.browser.append("<font color=red>"+ text + " is invalid</font>") 
app=QApplication(sys.argv) 
f=Form() 
f.show() 
app.exec_() 
+0

Übrigens: 1) ** nothing ** benutze ein blankes 'except:'. Geben Sie immer an, welche Exception Sie abfangen möchten, andernfalls wird es sogar "KeyboardInterrupt" erfassen und Bugs können leicht ausgeblendet werden. 2) ** Niemals ** rufe 'eval' auf vom Benutzer eingegebenen Text auf. Wenn Sie den Text in eine Zahl umwandeln möchten, verwenden Sie 'int (Text)' oder 'float (Text)'. Wenn Sie jede Art von * literal * erlauben wollen, benutzen Sie 'literal_eval' aus dem' ast'-Paket. – Bakuriu

Antwort

1

in Python 3 Strings sind Unicode standardmäßig.

Die unicode Funktion entfernen, durch str ersetzen.

https://docs.python.org/3.0/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit

Wie Bakuriu sagte in seinem Kommentar, benutzen Sie nie eine nackte Ausnahme:

Bevorzugen:

except Exception as e: 
    print("Problem "+repr(e)) 
    # the line below requires some HTML normalization or resulting 
    # html could be incorrect 
    import re 
    ne = re.sub("[^\w]"," ",str(e)) 
    self.browser.append("<font color=red>"+ne+"</font>") 

Jetzt haben Sie die real/angezeigt nächste Ausnahme.

+0

versuchte es bro, aber es geht immer noch in Ausnahmeblock mit str sagt es text = str (self.lineedit.text(), 'utf-8') TypeError: Entschlüsselung str wird nicht unterstützt –

+0

einfach nicht dekodieren (entfernen utf-8) –

+0

Sie benötigen nicht "unicode" oder "str", wenn Sie Python 3 mit PyQt verwenden, da 'QString' automatisch in eine Python-Zeichenfolge konvertiert wird. Tun Sie einfach: 'text = self.lineedit.text()'. – ekhumoro

Verwandte Themen