2010-08-19 21 views
11
str = r'c:\path\to\folder\' # my comment 

आईडीई ग्रहण, python2.6अजगर कच्चे शाब्दिक स्ट्रिंग

जब स्ट्रिंग के अंतिम वर्ण बैकस्लैश है, यह पिछले एकल उद्धरण से बचने और स्ट्रिंग के भाग के रूप में मेरी टिप्पणी व्यवहार करेगा लगता है। लेकिन कच्ची स्ट्रिंग सभी बचने वाले पात्रों को अनदेखा करने का मानना ​​है, है ना? क्या गलत हो सकता है? धन्यवाद।

उत्तर

33

कच्चे स्ट्रिंग शाब्दिक छोड़कर भागने दृश्यों की शुरुआत जब तुरंत-निम्न वर्ण बोली-चरित्र है कि शाब्दिक परिसीमन किया जाता है, जो मामले में बैकस्लैश यह बच करता है के रूप में बैकस्लैश का इलाज नहीं है।

डिजाइन प्रेरणा यह है कि कच्चे स्ट्रिंग अक्षर वास्तव में केवल नियमित अभिव्यक्ति पैटर्न दर्ज करने की सुविधा के लिए मौजूद हैं - यह सब नहीं अन्य डिज़ाइन उद्देश्य ऐसे साहित्यों के लिए मौजूद है। और आरई पैटर्न को बैकस्लैश के साथ कभी खत्म होने की आवश्यकता नहीं है, लेकिन को नियम कहां से सभी प्रकार के उद्धरण वर्ण शामिल करने की आवश्यकता है।

कई लोग कच्चे स्ट्रिंग अक्षर का उपयोग करने की कोशिश करते हैं ताकि वे विंडोज पथों को जिस तरह से उपयोग कर रहे हैं (बैकस्लाश के साथ) में प्रवेश करने में सक्षम हों - लेकिन जैसा कि आपने देखा है कि जब आपको पथ की आवश्यकता होती है तो यह उपयोग टूट जाता है बैकस्लैश के साथ समाप्त होता है।

s = 'c:/path/to/folder/' 

(ओर ध्यान दें:: छाया builtin नाम नहीं है, की तरह आम तौर पर, सबसे आसान समाधान आगे स्लैश, जो माइक्रोसॉफ्ट के सी क्रम और रास्तों में के रूप में पूरी तरह से बराबर अजगर सहायता के सभी संस्करण का उपयोग करने के लिए है str, अपने स्वयं के पहचानकर्ताओं के साथ - यह किसी भी उलझन के बिना एक भयानक प्रथा है, और जब तक कि आप उस भयानक अभ्यास से बचने की आदत में न आएं, एक दिन जब आप अपने कुछ हिस्से को एक गंदी-से-डीबग समस्या के साथ मिल जाएंगे, एक बिल्टिन नाम पर कोड ट्रैम्पल्स और किसी अन्य भाग को का उपयोग अपने वास्तविक अर्थ में अंतर्निहित नाम का उपयोग करने की आवश्यकता है)।

+3

(यहां तक ​​कि एक कच्चे स्ट्रिंग बैकस्लैश का एक विषम संख्या में समाप्त नहीं कर सकते हैं) नहीं है + पाइथन पर 1 ''' –

+0

का उपयोग कर विंडोज पथों का सही ढंग से व्याख्या करने पर 1 थोड़ा अलग उपयोग लेकिन समान प्रश्न: एक बी 64encode() एक बाइट ऑब्जेक्ट अंत में एक शाब्दिक बैकस्लैश के साथ कैसे करता है? अगर मैं b'somestring कोशिश करता हूं \ 'मुझे एक त्रुटि मिलती है, अगर मैं bssestring \\' यह बैकस्लाश दोनों को एन्कोड करता है। – Jerod

8

यह आईएमएचओ पायथन में एक असंगतता है, लेकिन यह दस्तावेज़ीकरण में वर्णित है। दूसरा पिछले पैराग्राफ पर जाएँ:

http://docs.python.org/reference/lexical_analysis.html#string-literals

आर "\" एक मान्य स्ट्रिंग शाब्दिक

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