Safe casting in python

霸气de小男生 提交于 2020-07-28 12:46:46

问题


How to do safe cast in python

In c# I can safe cast by keyword as, e.g.:

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

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

Has python something similar to this?


回答1:


Think not, but you may implement your own:

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



回答2:


I do realize that this is an old post, but this might be helpful to some one.

x = int(word) if word.isdigit() else None



回答3:


I believe, you've heard about "pythonic" way to do things. So, safe casting would actually rely on "Ask forgiveness, not permission" rule.

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
    # ...       



回答4:


There is something similar:

>>> 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



回答5:


Casting has sense only for a variable (= chunk of memory whose content can change)

There are no variables whose content can change, in Python. There are only objects, that aren't contained in something: they have per se existence. Then, the type of an object can't change, AFAIK.

Then, casting has no sense in Python. That's my believing and opinion. Correct me if I am wrong, please.

.

As casting has no sense in Python, there is no sense to try to answer to this question.

The question reveals some miscomprehension of the fundamentals of Python and you will gain more profit obtaining answers after having explained what led you thinking that you need to cast something



来源:https://stackoverflow.com/questions/6330071/safe-casting-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!