2016-05-02 8 views
0

im Python 2.7 Schale, nachdem ich folgendes tun:Ergebnis Anschlag in der IDLE Schale zeigt nach dem Neuladen Verwendung (sys)

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

die Schale Anschlag das Ergebnis zeigt. Wenn ich print('hello world') eintippe, wird nichts angezeigt.

Übrigens, warum ist reload(sys) hier essentiell? Ohne es verursacht die setdefaultencoding() einen Fehler?

+0

Und jetzt wissen Sie, warum Sie diese Methode nicht verwenden sollten. –

+0

jedes erklären wird geschätzt –

Antwort

0

Die Frage nach der Notwendigkeit reload(sys) hat nichts mit IDLE zu tun. Lesen Sie den letzten Satz des 2.7 doc-Eintrags.

sys.setdefaultencoding (name)

die aktuelle Standard-String-Codierung durch die Unicode-Implementierung verwendet ein. Wenn der Name keiner verfügbaren Codierung entspricht, wird LookupError ausgelöst. Diese Funktion soll nur von der Site-Modul-Implementierung und bei Bedarf von sitecustomize verwendet werden. Sobald es vom Site-Modul verwendet wurde, wird es aus dem Namespace des sys-Moduls entfernt.

Sie sollten die Funktion nicht verwenden. In 3.x wurde es entfernt (oder unsichtbar gemacht). Daher das Folgende vom Standard-Python-Konsolen-Interpreter.

C:\Users\Terry>py 
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:40:30) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys 
<module 'sys' (built-in)> 
>>> sys.setdefaultencoding 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'setdefaultencoding' 

In 2.7, Neuladen initialisiert das Modul neu und macht das Entfernen rückgängig. Daher

>>> reload(sys) 
<module 'sys' (built-in)> 
>>> sys.setdefaultencoding 
<built-in function setdefaultencoding> 

EDIT: Irrelevantes Material entfernt und die folgende richtige Antwort hinzugefügt.

In Bezug auf das Druckproblem: reload auch macht IDLE die Änderung der Ausgangsströme. Dies deaktiviert Druckbefehle. Sie führen aus (nicht erhöhen), aber nichts wird tatsächlich gesendet.

>>> print 'abc', u'abc' 
>>> 

Das obige ist nach dem Neuladen, aber vor dem Aufruf der wiederbelebten setdefaultencoding. Ich plane, eine Notiz der IDLE-Dokumentwarnung hinzuzufügen, die besagt, dass das erneute Laden von sysle IDLE deaktiviert, indem es seine Änderungen rückgängig macht.