2015-10-08 5 views
5

स्पष्ट रूप से ur"" सिंटैक्स को पायथन 3 में अक्षम कर दिया गया है। हालांकि, मुझे इसकी आवश्यकता है! "क्यों?", आप पूछ सकते हैं। खैर, मुझे u उपसर्ग की आवश्यकता है क्योंकि यह एक यूनिकोड स्ट्रिंग है और मेरे कोड को पायथन 2 पर काम करने की आवश्यकता है। r उपसर्ग के लिए, शायद यह आवश्यक नहीं है, लेकिन मेरे द्वारा उपयोग किए जा रहे मार्कअप प्रारूप में बहुत सी बैकस्लैश की आवश्यकता होगी और यह होगा गलतियों से बचने में मदद करें।कच्चे यूनिकोड शाब्दिक जो पायथन 2 और पायथन 3 में मान्य है?

यहाँ है कि मैं क्या अजगर 2 में चाहते हैं, लेकिन अजगर 3 में गैर कानूनी है एक उदाहरण है:

tamil_letter_ma = u"\u0bae" 
marked_text = ur"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma 

इस समस्या के पार आने के बाद, मैं http://bugs.python.org/issue15096 मिल गया है और इस उद्धरण देखा:

सीमा को दूर करना आसान है।

क्या कोई इस बारे में कोई विचार पेश करने की देखभाल करेगा?

संबंधित: What exactly do "u" and "r" string flags do in Python, and what are raw string literals?

उत्तर

9

में ur रूप में एक ही उत्पादन करेगा आप क्यों नहीं बस कच्चे का उपयोग नहीं करते स्ट्रिंग शाब्दिक (r'....'), आपको u निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि पाइथन 3 में, तार यूनिकोड तार हैं।

>>> tamil_letter_ma = "\u0bae" 
>>> marked_text = r"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma 
>>> marked_text 
'\\aம\\bthe Tamil\\cletter\\dMa\\e' 

यह भी, पायथन 2.x में काम करते हैं तो यह है कि स्ट्रिंग शाब्दिक में में स्रोत कोड यूनिकोड बन अपने स्रोत कोड के बहुत शुरुआत में the following Future import statement जोड़ें, बनाने के लिए।

from __future__ import unicode_literals 
-1

यूनिकोड तार, अजगर 3.x में डिफ़ॉल्ट हैं तो अकेले r का उपयोग कर पायथन 2.

+0

-1; यह सवाल के बिंदु को याद करता है, जो एक कच्चे यूनिकोड शाब्दिक को लिखना है जो * पाइथन 2 और पायथन 3 दोनों में एक साथ वैध है। –

1

पसंदीदा तरीका u'' उपसर्ग ड्रॉप और @falsetru suggested रूप from __future__ import unicode_literals उपयोग करने के लिए है। लेकिन अपने विशिष्ट मामले में, आप इस तथ्य का दुरुपयोग कर सकता है कि "ascii-only string" % unicode रिटर्न यूनिकोड:

>>> tamil_letter_ma = u"\u0bae" 
>>> marked_text = r"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma 
>>> marked_text 
u'\\a\u0bae\\bthe Tamil\\cletter\\dMa\\e' 
-1
python3 के बारे में

: सभी स्ट्रिंग्स डिफ़ॉल्ट रूप से हमेशा यूनिकोड कर रहे हैं। u उपसर्ग ने अपना कार्य खो दिया है और भाषा से हटा दिया गया था।

हालांकि संस्करण 3.3 के साथ शुरू होने पर, u को Python2 से पोर्टिंग को आसान बनाने के लिए फिर से स्वीकार किया जाता है (और अनदेखा)।

तो अपने तारों को बनाने के लिए एक तरीका Python3 और Python2 संगत संस्करण 3.3+ की आवश्यकता है जिसे 3 साल पहले जारी किया गया था।

+0

-1; यह सवाल विशेष रूप से 'ur'-prefixed तारों के बारे में था, न कि केवल 'u'-prefixed तारों, और' ur' * पायथन 3.3+ में समर्थित नहीं है। –

+0

@MarkAmery: आपकी टिप्पणी के लिए धन्यवाद और सहायक उत्तर देने के लिए खेद है। – VPfB

संबंधित मुद्दे