2011-08-15 4 views
9

मैंने एक चीज खोज ली है जो मुझे पागल बनाती है। अगर मैं निम्न सूची निर्दिष्ट करें: कोई त्रुटि प्रदर्शित किया जाएगाक्या कोई कारण है कि lVals = [1, 08, 2011] अपवाद फेंकता है?

lVals = [1, 01, 2011] 

तो, और अगर मैं 02,03,04,05,06,07 का उपयोग एक ही हो जाएगा, लेकिन मामले में मैं 08 या 09 का उपयोग सूची में दूसरे मद के रूप में, मैं निम्न अपवाद:

>>> a = [26, 08, 2011] 
    File "<stdin>", line 1 
    a = [26, 08, 2011] 
      ^
SyntaxError: invalid token 

भी समान व्यवहार प्रकट होता है जब मैं सूची (जैसे [08,10,2011]।) के भीतर किसी भी स्थान पर इन नंबरों (08, 09) रखा, भले ही मैं एक ही int चर मैं करने के लिए 08 आवंटित करने के लिए कोशिश एस प्राप्त करें एएम अपवाद।

क्या ऐसा कोई कारण है?

+0

यह मेरे लिए इस तरह के एक commom गलती है। जब ऐसा होता है तो मैंने इसे समझने में बहुत समय लगाया। –

+2

पायथन 3 में यह कोई समस्या नहीं होगी - ऑक्टल अक्षर '0o' से शुरू होते हैं। – agf

+1

@agf: '01' से' 07' में "कोई समस्या नहीं होगी" भी अवैध टोकन हैं ... – geoffspear

उत्तर

14

088 को एक अंडाकार अंक के रूप में पार्स करने का प्रयास कर रहा है। यह एक नहीं है।

+0

धन्यवाद @Wooble। यह इतना आसान है))। हालांकि ऐसा लगता है कि पायथन 2.7 कंसोल फेंकना एक बहुत ही उल्लेखनीय अपवाद नहीं है: 'अमान्य टोकन' जबकि आयरनपीटन 2.6 स्पष्ट अपवाद फेंक रहा है: 'घातक त्रुटि: पूर्णांक मूल्य के लिए खराब चार:' 8 '(आधार 8): 08' –

+0

@ आर्टिसियोम: यह दिखता है एक आयरनपीथन परिवर्तन की तरह; Cpython 2.5, 2.6, और 3.2 सभी "अवैध टोकन" संदेश देते हैं। मुझे संदेह है कि आयरनपीथन में रूपांतरण नेट के भीतर निचले स्तर पर किया जा रहा है। – geoffspear

+0

शायद, कभी-कभी आयरनपीथन बेहतर दिखता है, कभी-कभी बदतर - लेकिन मुझे यह और अधिक पसंद है –

4

मुझे वास्तव में पायथन पता नहीं है, लेकिन मुझे लगता है कि यह प्रारंभिक 0 को अष्ट शाब्दिक की शुरुआत के रूप में लेता है।

2

जावा में, शून्य उपसर्ग एक ऑक्टल मान निर्दिष्ट करेगा - तो 01 ... 07 ठीक है, 08 एक त्रुटि होगी क्योंकि ऑक्टल में कोई 8 नहीं है।

3

मुझे लगता है कि आप जो करने का प्रयास कर रहे हैं वह एक तिथि विभाजित है और इसे एक सूची में डाल दिया गया है। यह वही मेरे लिए काम करता है:

>>> date = "28-08-2011".split("-") 
>>> for i, num in enumerate(date): 
...  date[i] = int(num, 10) # changes octal to decimal, thus losing the prefix 0 
... 
>>> date 
[28, 8, 2011] 
संबंधित मुद्दे