And in case:
# coding: utf-8
import traceback
try:
raise Exception(u'Зрегиться')
except Exception,e:
print traceback.format_exc().decode('utf-8').encode('cp437', 'replace')
Getting
beryl:~ oleg$ python ./wish/newaccount/reg.py
Traceback (most recent call last):
File "./wish/newaccount/reg.py", line 5, in <module>
raise Exception(u'?????????')
Exception: <unprintable Exception object>
My console settings:
In [1]: import sys
In [2]: sys.getdefaultencoding()
Out[2]: 'ascii'
In [3]: sys.stdout.encoding
Out[3]: 'US-ASCII'
On Thu, Jul 17, 2008 at 9:30 AM, Oleg Oltar <[EMAIL PROTECTED]> wrote:
> OK
> the output:
>
> # coding: utf-8
>>
>> import traceback
>> try:
>> raise Exception(u'Зрегиться')
>> except Exception,e:
>> print traceback.format_exc().decode('utf-8')
>>
>
>
> >>> Traceback (most recent call last):
> File "/var/folders/PC/PCtFE4gQGiqpQymiAScfnk+++TM/-Tmp-/py46506ECT", line
> 7, in <module>
> print traceback.format_exc().decode('utf-8')
> UnicodeEncodeError: 'ascii' codec can't encode characters in position
> 148-156: ordinal not in range(128)
>
>
>
>
> On Thu, Jul 17, 2008 at 8:13 AM, Mark Tolonen <[EMAIL PROTECTED]<[EMAIL
> PROTECTED]>>
> wrote:
>
>> The Exception is output in the encoding of the source file. If the
>> terminal you are displaying the exception on is in a different encoding, it
>> will be garbled. I'm not familiar with OS X's terminal. Try running python
>> and printing sys.stdout.encoding.
>>
>> Alternatively, wrap your code in a try/except handler and translate the
>> exception yourself.
>>
>> # coding: utf-8
>> import traceback
>> try:
>> raise Exception(u'Зарегистрироваться')
>> except Exception,e:
>> print traceback.format_exc().decode('utf-8')
>>
>> The last line translates the utf-8 traceback into Unicode. Printing
>> Unicode will encode the output with the terminal's decoding. If there are
>> characters it can't display, you'll still get an error, though. You can be
>> more explicit however:
>>
>> print traceback.format_exc().decode('utf-8').encode('cp437','replace')
>>
>> In this case you'll get ? whenever a character can't be represented in the
>> selected encoding. cp437, for example, can't display any russian
>> characters, so for me (on Windows) I just get all ???????????. When I tried
>> it with a character string that could be displayed in cp437, it worked fine:
>>
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> File "t4.py", line 4, in <module>
>> raise Exception('MàΓ£ΦΘΩδ')
>> Exception: MàΓ£ΦΘΩδ
>>
>> Another option is to redirect the output to a file and read the file with
>> an editor that can display utf-8 (such as Notepad on Windows).
>>
>> python testfile.py 2>error.txt # this redirects stderr to a
>> file.
>>
>> Hope that helps,
>> Mark
>>
>> "Oleg Oltar" <[EMAIL PROTECTED]> wrote in message
>> news:[EMAIL PROTECTED]
>>
>>> The code
>>
>> # -*- coding: utf-8 -*-
>> #!/usr/bin/python
>>
>>
>> """
>>
>> This test case check how system works in the situation, when user tries to
>> use already
>> used username (domain)
>>
>> We are creating two accounts with such parameters:
>> 1. Sex = Femle
>> 2. Name1=Name2 = foobar%S
>> 3. Pass1 = Name
>> 4. Pass2 = Name
>> 5. Email address1 = Email address2 = [EMAIL PROTECTED]
>>
>>
>> In the test we use verification point - warning message about incorrect
>> input of domain name and the
>> sugestion message
>>
>> """
>>
>> from selenium import selenium
>> import unittest, time, re
>> import HTMLTestRunner
>> import config
>> import Creating_account_basic
>>
>>
>>
>>
>> class Same_domain_name(unittest.TestCase):
>>
>> def setUp(self):
>> self.name = "foobar"
>> self.email = self.name + "@meta.ua"
>> self.verificationErrors = []
>> self.selenium = selenium("localhost", 4444,config.browser,
>> config.link)
>> self.selenium.start()
>>
>> def test_create_account_to_check(self):
>> """Creating sample account for next test"""
>> sel = self.selenium
>> sel.open("/")
>> sel.click(u"link=Регистрация")
>> sel.wait_for_page_to_load("70000")
>> sel.click("id_gender_1")
>> sel.type("id_first_name", self.name)
>> sel.type("id_last_name", self.name)
>> sel.type("id_email", self.email)
>> sel.type("id_username", self.name)
>>
>> #sel.wait_for_condition(sel.is_element_present("check_username_block"),
>> 70000)
>> time.sleep(10)
>> print "!!!", sel.is_element_present("check_username_block")
>> sel.type("id_password", self.name)
>> print sel.get_text("check_username_block").decode('cp-1252')
>> sel.type("id_password2", self.name)
>> sel.click(u"//[EMAIL PROTECTED]'Зарегистрироваться']")
>> sel.wait_for_page_to_load("70000")
>> if config.debugMode is True:
>> time.sleep(5)
>>
>>
>> def tearDown(self):
>> self.selenium.stop()
>> print self.verificationErrors
>> self.assertEqual([], self.verificationErrors)
>>
>> if __name__ == "__main__":
>>
>> unittest.main()
>> #HTMLTestRunner.main()
>>
>>
>>
>> On Thu, Jul 17, 2008 at 6:47 AM, Oleg Oltar <[EMAIL PROTECTED]>
>> wrote:
>>
>>> In [1]: import sys
>>>
>>> In [2]: sys.getdefaultencoding()
>>> Out[2]: 'ascii'
>>>
>>> In [3]: sys.stdout.encoding
>>> Out[3]: 'US-ASCII'
>>>
>>>
>>> On Thu, Jul 17, 2008 at 6:29 AM, Oleg Oltar <[EMAIL PROTECTED]>
>>> wrote:
>>>
>>>> Seems need help there. Start getting
>>>>
>>>> Traceback (most recent call last):
>>>> File "./newaccount/Same_domain_name.py", line 56, in
>>>> test_create_account_to_check
>>>> print sel.get_text("check_username_block")
>>>> UnicodeEncodeError: 'ascii' codec can't encode characters in position
>>>> 0-4: ordinal not in range(128)
>>>>
>>>>
>>>> when trying to get the text of one of the elements.
>>>>
>>>> How to solve it?
>>>>
>>>>
>>>> On Thu, Jul 17, 2008 at 5:11 AM, Oleg Oltar <[EMAIL PROTECTED]>
>>>> wrote:
>>>>
>>>>> OK,
>>>>>
>>>>> I just run the program from terminal. OS: OS X, IDLE = Emacs:).
>>>>>
>>>>> Yep used the string "# -*- coding: utf-8 -*-" to setup encoding....
>>>>>
>>>>>
>>>>> On Thu, Jul 17, 2008 at 4:14 AM, Kent Johnson <[EMAIL PROTECTED]> wrote:
>>>>>
>>>>>> Another possibility - do you have a coding declaration in your source
>>>>>> file, something like
>>>>>> # -*- coding: <encoding name> -*-
>>>>>>
>>>>>> If so, does the coding declaration match the actual encoding of the
>>>>>> file?
>>>>>>
>>>>>> Kent
>>>>>>
>>>>>> On Wed, Jul 16, 2008 at 5:11 PM, Kent Johnson <[EMAIL PROTECTED]> wrote:
>>>>>> > On Wed, Jul 16, 2008 at 2:40 PM, Oleg Oltar <[EMAIL PROTECTED]>
>>>>>> wrote:
>>>>>> >> Hi I am using unittest framework with selenium.
>>>>>> >>
>>>>>> >> When I tried this code (my verification point)
>>>>>> >>
>>>>>> >> self.assertEqual(True, sel.is_text_present(u"Извените
>>>>>> пароли не
>>>>>> >> совпадают"), "System didn't give a correct warning about the
>>>>>> password
>>>>>> >> misstype")
>>>>>> >>
>>>>>> >>> Where u"Извените пароли не совпадают" is russian = "Sorry
>>>>>> passwords aren't
>>>>>> >>> equal", and sel.is_text_present - searches text string on the page
>>>>>> >>
>>>>>> >> The output I get in case of failure was:
>>>>>> >>
>>>>>> >>
>>>>>> >> Traceback (most recent call last):
>>>>>> >>
>>>>>> >> File "./newaccount/Password_matching.py", line 50, in
>>>>>> >> test_passwordMatching
>>>>>> >> self.assertEqual(True, sel.is_text_present(u"Извените
>>>>>> >> пароли не Ñ Ð¾Ð²Ð¿Ð°Ð´Ð°ÑŽÑ‚"), "System didn't give a
>>>>>> correct
>>>>>> >> warning about the password misstype")
>>>>>> >>
>>>>>> >> AssertionError: System didn't give a correct warning about the
>>>>>> password
>>>>>> >> misstype
>>>>>> >>
>>>>>> >> Is there any way to get normal russian text instead of these
>>>>>> strange D chars
>>>>>> >> "Изве...."
>>>>>> >
>>>>>> > I don't have the solution but maybe I can give you a useful clue.
>>>>>> The
>>>>>> > D characters are most likely the utf-8 encoding of the Russian text,
>>>>>> > when displayed as if it is latin-1. So something in the system is
>>>>>> > converting the text to utf-8 and your console probably has latin-1
>>>>>> or
>>>>>> > cp1252 encoding.
>>>>>> >
>>>>>> > Some details might help - how are you running the program - console,
>>>>>> > IDLE...? What OS? What are the values of sys.getdefaultencoding()
>>>>>> and
>>>>>> > sys.stdout.encoding?
>>>>>> >
>>>>>> > Kent
>>>>>> >
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>> ------------------------------
>>
>> _______________________________________________
>> Tutor maillist - [email protected]
>> http://mail.python.org/mailman/listinfo/tutor
>>
>>
>> _______________________________________________
>> Tutor maillist - [email protected]
>> http://mail.python.org/mailman/listinfo/tutor
>>
>>
>
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor