имя unicode не определено python3

я пытался запустить этот код, это файл ошибки "C:/hari/Academics/python/pyprograms/gui qt4/book/calculator.py", строка 27, в updateUi text = unicode(self.lineedit.text (), 'utf-8') NameError: имя 'unicode' не определено

код :

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_()

person Sai Hari Morapakala    schedule 27.07.2016    source источник
comment
Кстати: 1) никогда не используйте голый except:. Всегда указывайте, какое исключение вы хотите перехватить, иначе оно перехватит даже KeyboardInterrupt, а также может легко скрыть ошибки. 2) никогда не вызывать eval для текста, вставленного пользователем. Если вы хотите преобразовать текст в число, используйте int(text) или float(text). Если вы хотите разрешить любой вид литералов, используйте literal_eval из пакета ast.   -  person Bakuriu    schedule 27.07.2016


Ответы (2)


в строках python 3 по умолчанию используется unicode.

Удалите функцию unicode, замените на str.

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

Как сказал Бакуриу в своем комментарии, никогда не используйте голый, кроме:

Предпочитать:

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>")

Теперь у вас отображается реальное/следующее исключение.

person Jean-François Fabre    schedule 27.07.2016
comment
попробовал, братан, но он все еще входит в блок исключений с помощью str, он говорит text = str(self.lineedit.text(),'utf-8') TypeError: декодирование str не поддерживается - person Sai Hari Morapakala; 27.07.2016
comment
Вам не нужны unicode или str при использовании Python 3 с PyQt, поскольку QString автоматически преобразуется в строку Python. Просто сделайте: text = self.lineedit.text(). - person ekhumoro; 27.07.2016
comment
получаете ли вы исключение (если вы следовали нашим советам о деталях исключений) и если да, можете ли вы поделиться с нами? - person Jean-François Fabre; 28.07.2016

Надеюсь, вы используете Python 3, поэтому, пожалуйста, замените

Unicode с функцией String Str.

def updateUi(self):
    try:
        text = str(self.lineedit.text())  ##replaced here
person M.J    schedule 27.03.2018