странная ошибка языка Python. что здесь происходит?

Если у вас есть Guava в вашем проекте, вы можете использовать метод Streams.zip (был добавлен в Guava 21):

Возвращает поток, в котором каждый элемент является результатом передачи соответствующему элементу каждого из streamA и streamB в функцию. Результирующий поток будет только до тех пор, пока более короткий из двух входных потоков; если один поток длиннее, его дополнительные элементы будут проигнорированы. Полученный поток неэффективно расщепляется. Это может повредить параллельной работе.

 public class Streams {
     ...

     public static  Stream zip(Stream streamA,
             Stream streamB, BiFunction function) {
         ...
     }
 }

30
задан Stefano Borini 2 December 2009 в 02:57
поделиться

2 ответа

ОБНОВЛЕНИЕ 2016: Оказалось, что это ошибка Python по крайней мере с 2013 года, очень вероятно и раньше, заключающаяся в том, что Python плохо реагирует на локали, отличные от GNU, например те, что есть в Mac OS X и BSD. Ошибка остается открытой по состоянию на сентябрь 2016 года и затрагивает все версии Python.


Если не была установлена ​​переменная среды LANG , скорее всего, у вас была либо LC_CTYPE (ключевая переменная), либо LC_ALL (которая имеет приоритет, если установлена) переменная среды установлена ​​на UTF-8 , что не является допустимой локалью OS X. Достаточно легко воспроизвести его с помощью поставляемого Apple / usr / bin / python или с помощью специального питона, как в вашем случае, который был собран с помощью SDK 10.6 (возможно, также 10.5 SDK). Вы не сможете воспроизвести это таким образом на питоне. org python; в настоящее время они построены с использованием SDK 10.4, в котором API-интерфейсы локали работают по-другому.

$ unset LANG
$ env | grep LC_
$ export LC_CTYPE="UTF-8"
$ /usr/bin/python  # Apple-supplied python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 459, in getdefaultlocale
    return _parse_localename(localename)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 391, in _parse_localename
    raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
^D
$ /usr/local/bin/python2.6   # python.org python
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
(None, 'mac-roman')
>>> 

РЕДАКТИРОВАТЬ:

Может быть, есть еще один кусок головоломки. Беглый взгляд на bzr 2.0.1, который я установил, показывает, что цитируемое вами сообщение должно отображаться только в том случае, если locale.getpreferredencoding () вызывает locale.Error ]. Это может произойти, если расширение python _locale.so C не может быть загружено, и это может произойти, если на нем есть проблемы с правами доступа. Например, в настоящее время известно, что MacPorts имеет проблемы с настройкой разрешений, если у вас настроена umask ; Я сам был обожжен этой проблемой. Проверьте разрешения для _locale.so в каталоге python lib / python2.5 / lib-dynload и убедитесь, что это 755 . Полный путь для MacPorts должен быть:

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/
17
ответ дан 28 November 2019 в 00:22
поделиться

Это проблема Mac OS X. Чтобы увидеть настройки локали, запустите locale в терминале. locale -a должен перечислить все локали, которые вы определили (которые вы можете использовать в качестве аргумента для LC_ALL).

Обратите внимание, что LC_ALL и другие LC _ * переменные имеют приоритет над LANG , если они определены.

4
ответ дан 28 November 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: