Unicode dizeleriyle Python 2 kodu yazıyor, unicode_literals içeriyor ve yükseltme istisnaları ile ilgili sorunlarım var.Unicode dizesi içeren bir Özel Durumu nasıl alabilirim?
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
raise Exception('Tést')
Bunu yaparken, 'Tést' dizgisi terminalden çıkarılır.
ben doğrusu bütün raise Exception
tablolara bu yapmak zorunda daha global bir çözüm bulmak istiyorum
raise Exception('Tést'.encode('utf-8'))
ile bu geçici bir çözüm bulabilirler.
(ı İstisna mesajlarında PyQt'nin tr()
fonksiyonunu kullanıyorum beri özel karakterler ele alınması gerekir, ben encode('utf-8')
gerekli olup olmadığını zaman kodlama de bilemez.)
kötü. Bazen bir İstisna'yı yakalamak, mesajını almak ve ilk İstisna dizesiyle bir temel dizeyi birleştirerek yeni bir İstisnayı yükseltmek istiyorum.
ben bu şekilde yapmak zorunda:
try:
raise TypeError('Tést'.encode('utf-8'))
except Exception as e:
raise Exception('Exception: {}'.format(str(e).decode('utf-8')).encode('utf-8'))
ama gerçekten daha az külfetli olmak isterdim (ve bu örnek bile self.tr()
aramaları içermez).
Daha basit bir yolu var mı?
soruya Aşağıdaki yorum
Yasal Uyarı: PyQT'nin tr() yöntemini ve onu nasıl kullandığınızı bilmiyorum, bu nedenle sorunun özelliklerini çok iyi anlayamıyorum. Sadece ilgili şeylere baktığınızdan emin olmak için: - Global stderr kancalarına baktın mı? (http://stackoverflow.com/questions/8288717/python-print-passing-extra-text-to-sys-stdout, http://www.macfreek.nl/memory/Encoding_of_Python_stdout); - İstisna kancalarına baktınız mı? (http://www.creativelydo.com/blog/how-to-globally-customize-exceptions-in-python/) - biçimlendirme istisnalarında çok fazla özgürlük; - Kendi istisna sınıfınızı kullanmayı denediniz mi? – morfizm
Zaten kendi sorunuzu cevapladınız: Python3 cevaptır. Yeni bir proje başlatıyorsanız, bunu yapmak için çok iyi nedenleriniz olmadığı sürece Python2'yi kullanmamalısınız (örn. Kaçınılmaz bağımlılıklar). Python3'teki unicode gelişmeleri muhtemelen en büyük satış noktalarından biridir - aslında karşılaştığınız konular * tam olarak neden * bu gelişmeler yapıldı. – ekhumoro
Evet, ekhumoro, Python3'ü tercih ederim. Bağımlılık nedeniyle Python 2'yi kullanmalıyız. Alternatif olmadığını kontrol edeceğim. Bu arada, bir ilke olarak, geleceğe uyumlu olmak ve olması gereken şeyleri yapmak için elimden geleni yapıyorum. İdeal bir yol olmadığını doğruladığınızdan, geçici çözümümüzü seçeceğim. "Kendi İstisna sınıfı" açıkça kanonik şekilde değil, ama makul bir çözüm gibi görünüyor. –