Hata mesajı neyin yanlış olduğunu size söyler. Python yorumlayıcısının ASCII olmayan karakterin kodlamasını bilmesi gerekir.
U + 00A3'e dönmek istiyorsanız şunu söyleyebilirsiniz:
return u'\u00a3'
Unicode kaçış dizisi ile saf ASCII'de bu karakteri temsil eder. 0xA3 değişmez baytını içeren bir bayt dizesi döndürmek istiyorsanız,
return b'\xa3'
(burada Python 2'de b
örtük; ancak örtük, örtükten daha iyidir).
Hata mesajındaki bağlantılı PEP, Python'a "bu dosyanın saf ASCII olmadığını; işte kullandığım kodlamayı" nasıl söyleyeceğini tam olarak söyler. Kodlama UTF-8 ise, bu
# coding=utf-8
veya Emacs uyumlu
# -*- encoding: utf-8 -*-
Bu dosyayı kaydetmek için düzenleyicinizin hangi kodlamayı kullandığını bilmiyorsanız, onaltılı düzenleyici ve bazı googling gibi bir şeyle inceleyin. Yığın Taşmasıkarakter kodlamasıetiketi, daha fazla bilgi ve sorun giderme ipuçları içeren bir etiket bilgisi sayfasına sahiptir.
Pek çok deyişle, 7 bit ASCII aralığının dışında (0x00-0x7F), Python bir bayt dizisinin hangi dizeyi temsil ettiğini tahmin edemez ve tahmin etmemelidir. https://tripleee.github.io/8bit#a3 , bayt 0xA3 için 21 olası yorumu gösterir ve bu yalnızca eski 8 bit kodlamalardan elde edilir; ancak çok baytlı kodlamanın ilk baytı da çok iyi olabilir. Ama aslında, aslında Latin-1 kullandığınızı tahmin ediyorum, bu yüzden
# coding: latin-1
kaynak dosyanızın ilk veya ikinci satırı olarak. Her neyse, baytın hangi karakteri temsil etmesi gerektiği bilgisi olmadan, bir insan da bunu tahmin edemezdi.
Bir uyarı: coding: latin-1
hata mesajını kesinlikle kaldıracaktır (çünkü bu kodlamada teknik olarak izin verilmeyen bayt dizileri yoktur), ancak gerçek kodlama başka bir şeyse kod yorumlandığında tamamen yanlış sonuç verebilir. Kodlamayı bildirirken dosyanın kodlamasını tam olarak bilmek zorundasınız.