2010-02-28 19 views
24

nuovo qui! Sono un principiante in Python e ho esaminato il libro di cucina Python (2a edizione) per imparare come elaborare stringhe e caratteri.Non posso usare unichr in Python 3.1

ho voluto provare la conversione di un numero nel suo equivalente Unicode. Così ho provato ad utilizzare il built-in function called 'unichr', che, secondo il libro di cucina, più o meno così:

>>> print repr(unichr(8224)) 

... e sarà uscita:

u'\u2020' 

Tuttavia, il codice non è riuscita. Ho pensato che avesse qualcosa a che fare con stampa (perché Python 3 usa print() invece di stampare ""), ma non ha funzionato. Ho provato diverse varianti al codice, e ancora non è riuscito. Finalmente, ho scritto una semplice linea:

unichr(10000) 

Con mia grande sorpresa, questo messaggio di errore mantenuto popping up, non importa quale valore ho messo nella funzione di cui sopra:

NameError: name 'unichr' is not defined 

Che cosa potrebbe essere il problema? C'è qualche modulo specifico che dovrei importare?

+1

Solo un suggerimento: si potrebbe e dovrebbe aver menzionato il messaggio di errore subito dopo "il codice non è riuscito." Nota sempre il messaggio di errore che Python fornisce (e il messaggio di errore * exact *, non dalla memoria), e menzionalo in anticipo. –

+0

Grazie per il consiglio, sicuramente terrò a mente. – anonnoir

risposta

39

In Python 3, è sufficiente utilizzare chr:

>>> chr(10000) 
'✐' 
3

Python 3.x non ha uno speciale tipo stringa Unicode/classe. Ogni stringa è una stringa Unicode. Quindi ... proverei lo chr. Dovrebbe darti cosa ha fatto pre-3.x unichr. Non posso testare, purtroppo.

11

In Python 3, non c'è alcuna differenza tra unicode e stringhe normali più. Solo tra stringhe unicode e dati binari. Quindi gli sviluppatori hanno finalmente rimosso la funzione unichr in favore di un comune chr che ora fa ciò che ha fatto il vecchio unichr. Vedere la documentazione here.

+0

Grazie. Ho provato a pubblicare una domanda correlata in questa area di commento, ma non si riempirà correttamente, quindi l'ho postata qui sotto. (Spero di non aver eseguito il controllo delle regole del sito facendo così.) – anonnoir

+0

Ci sono ancora due tipi string-ish. Che 2.x chiama 'unicode', 3.x chiama' str' (con cambiamenti banali). Che 2.x chiama 'str', 3.x chiama' byte' (con modifiche moderate). –

Problemi correlati