И действительно, мое исключение не кажется
работать. Есть предложения?
row = OpenThisLink + titleTag + JD
находится вне блока try / исключением, поэтому любые исключения, возникшие во время выполнения этого оператора, не будут перехвачены. Это, однако, поймает исключение:
try:
row = OpenThisLink + titleTag + JD
csvwriter.writerow([row])
except (UnicodeEncodeError, UnicodeDecodeError):
print "Caught unicode error"
Но в опубликованном вами коде row = OpenThisLink + titleTag + JD
не вызовет UnicodeEncodeError, если titleTag
содержит строку в юникоде; результат конкатенации строк будет иметь тип unicode.
Теперь модуль csv не поддерживает Unicode, поэтому при вызове writerow()
с данными Unicode это вызовет UnicodeEncodeError. Вам необходимо закодировать строки Unicode в подходящую кодировку (лучше всего использовать UTF8), а затем передать ее в writerow()
, например:
>>> titleTag = "hello Giliciński"
>>> titleTag
'hello Gilici\xc5\x84ski'
>>> type(titleTag)
<type 'str'>
>>>
>>> titleTag = titleTag.decode('utf8')
>>> titleTag
u'hello Gilici\u0144ski'
>>> type(titleTag)
<type 'unicode'>
>>>
>>> csvwriter.writerow([titleTag])
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 12: ordinal not in range(128)
>>>
>>> # but this will work...
>>> csvwriter.writerow([titleTag.encode('utf8')])
Соответствующая документация Python здесь . Обязательно посмотрите примеров , в частности последний.
Кстати, pyshell
, похоже, не принимает символы, отличные от ascii, в качестве входных данных, поэтому используйте обычный интерпретатор Python.