2011-06-13 4 views
6

में सुरक्षित कास्टिंग मुझे पाइथन में कास्टिंग करने में समस्या है।पायथन

सी # में मैं सुरक्षित रूप कीवर्ड द्वारा डाल सकता, उदा .:

string word="15"; 
var x=word as int32// here I get 15 

string word="fifteen"; 
var x=word as int32// here I get null 

अजगर (3.2) कुछ इस के समान है?

+6

ध्यान दें कि अजगर नहीं करता है वास्तव में * है * कास्टिंग की जरूरत का नेतृत्व करने के बाद अधिक लाभ प्राप्त करने के जवाब मिलेगा; यह सिर्फ दूसरे प्रकार के कन्स्ट्रक्टर के लिए मूल्य गुजर रहा है। –

+1

सी # प्रोग्रामिंग के लिए सी # का उपयोग करें। पायथन में आप अपवादों का उपयोग करना चाहते हैं, नल नहीं। –

+0

यह सी # में भी मान्य नहीं है। यह संकलन त्रुटि है। – Davy8

उत्तर

35

नहीं लगता है, लेकिन आप लागू कर सकते हैं अपनी खुद की:

def safe_cast(val, to_type, default=None): 
    try: 
     return to_type(val) 
    except (ValueError, TypeError): 
     return default 

safe_cast('tst', int) # will return None 
safe_cast('tst', int, 0) # will return 0 
+0

मुझे लगता है कि यदि आप अक्सर अपवादों की अपेक्षा करते हैं तो यह सबसे प्रभावी विकल्प नहीं है। – Matt

+2

मैं 'टाइप एरर' अपवाद जोड़ता हूं साथ ही –

3
वहाँ

कुछ इसी तरह है:

>>> word="15" 
>>> x=int(word) 
>>> x 
15 


>>> word="fifteen" 
>>> x=int(word) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: 'fifteen' 


>>> try: 
...  x=int(word) 
... except ValueError: 
...  x=None 
... 
>>> x is None 
True 
+2

ध्यान दें कि आपको क्लॉज को छोड़कर नंगे का उपयोग कभी नहीं करना चाहिए, इसलिए आप इस मामले में 'ValueError को छोड़कर' का उपयोग करना चाहते हैं, अन्यथा यह टाइपो, सिंटैक्स त्रुटियों आदि को पकड़ लेगा। –

+0

यह सही है, मैं केवल बिंदु पर ध्यान केंद्रित करना चाहता था, लेकिन शायद यह भी दिखाना बेहतर है। – unbeli

2

मुझे विश्वास है, आप के बारे में "pythonic" करने के लिए जिस तरह से सुना है कुछ करें। तो, सुरक्षित कास्टिंग वास्तव में "क्षमा मांगें, अनुमति नहीं" नियम पर भरोसा करेगी।

s = 'abc' 
try: 
    val = float(s) # or int 
    # here goes the code that relies on val 
except ValueError: 
    # here goes the code that handles failed parsing 
    # ...  
-3

कास्टिंग केवल

कोई भी वेरिएबल जिनकी सामग्री को बदल सकते हैं, पायथन में कर रहे हैं एक चर (जिनकी सामग्री को बदल सकते हैं स्मृति के = हिस्सा) के लिए कोई मतलब नहीं है। केवल वस्तुएं हैं, जो किसी चीज़ में निहित नहीं हैं: उनके पास प्रति से अस्तित्व है। फिर, ऑब्जेक्ट का प्रकार बदल नहीं सकता है, AFAIK।

फिर, पाइथन में कास्टिंग का कोई मतलब नहीं है। यह मेरा विश्वास और राय है। अगर मैं गलत हूं तो कृपया मुझे सही करें।

चूंकि कास्टिंग को पायथन में कोई समझ नहीं है, इस सवाल का जवाब देने का कोई अर्थ नहीं है।

प्रश्न अजगर की बुनियादी बातों में से कुछ miscomprehension का पता चलता है और आप समझाया होने आप क्या सोच है कि आप कुछ कास्ट करने के लिए

+4

इंटरनेट क्वेरी पैरामीटर के संदर्भ में काम करते समय तारों के रूप में दर्शाया जाता है। उन पैरामीटर को आपके आंतरिक मॉड्यूल में उपयोगी बनाने के लिए आपको अक्सर 15 '15' पर कास्ट करना होगा। यह केवल एक संभावित मामला है। – Matt

+0

ठीक है, यह कास्टिंग नहीं है एक रूपांतरण है। प्रश्न वैसे भी समझ में आता है। इतनी नकारात्मक होने की कोई आवश्यकता नहीं है: -1 –