Обходной к вашей проблеме было бы попробовать и закодировать строку в определенной кодировке.
Например:
'H€llø'.encode('utf-8')
Это отбросит следующее сообщение об ошибке:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1: ordinal not in range(128)
Теперь вы можете поймать «UnicodeDecodeError», чтобы определить, что строка не содержит только символы ASCII.
try:
'H€llø'.encode('utf-8')
except UnicodeDecodeError:
print 'This string contains more than just the ASCII characters.'
Я думаю, что это всегда приведет к созданию всего списка? Он использует больше памяти и будет медленнее, если первый символ является символом> 0x80, так как он продолжает итерацию по всей строке (что не имеет большого значения в * большинстве * приложений, но делает это в * some *). – Carpetsmoker
@Carpetsmoker> Я думаю, что это всегда создаст целый список? <Нет, не будет. Выражение внутри 'all' является генератором, который передает символы один за другим. – warvariuc
Хорошо, спасибо ;-) – Carpetsmoker