2011-06-13 37 views
6

我在使用python進行鑄造時遇到了問題。在python中進行安全鑄造

在C#中,我可以通過關鍵字安全鑄成,例如:

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

注意,Python沒有真正* *有鑄造後,你將獲得更多的利潤獲得答案;這只是將值傳遞給其他類型的構造函數。 – 2011-06-13 12:10:55

+1

使用C#進行C#編程。在Python中,你想使用異常,而不是空值。 – 2011-06-13 13:20:16

+0

這甚至在C#中都沒有。這是一個編譯錯誤。 – Davy8 2011-06-13 19:17:50

回答

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 2012-11-19 22:29:17

+2

我會添加'TypeError'異常 – 2016-11-02 09:28:18

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

請注意,除了子句之外,你不應該使用bare,所以你想在這種情況下使用'except ValueError:',否則會發現拼寫錯誤,語法錯誤等。 – 2011-06-13 15:54:26

+0

沒錯,我只想着重點,但可能最好也是展示一下。 – unbeli 2011-06-13 19:14:56

2

我相信,你聽說過 「Python的」 的方式做事。 所以,安全的轉換實際上依賴於「請求寬恕,不允許」規則。

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

鑄件具有意義只爲一個變量(內存=塊,其內容可改變)

沒有變量,其內容可改變,在Python。只有對象,不包含在內容中:他們有本身存在。然後,一個對象的類型不能改變,AFAIK。

然後,投射在Python中沒有意義。這是我的信念和意見。請糾正我,如果我錯了。

由於鑄造在Python中沒有意義,所以沒有辦法回答這個問題。

問題揭示的Python的基本面的一些誤解中和在解釋什麼促使你認爲你需要轉換的東西

+4

當在互聯網上下文中查詢時,參數被表示爲字符串。爲了使這些參數對您的內部模塊有用,您通常必須將「15」設置爲15.這只是一種可能的情況。 – Matt 2012-11-19 22:12:19

+0

好吧,它不是轉換。無論如何,這個問題很有意義。沒有必要這麼消極:-1 – 2014-02-05 09:28:15