Подтвердить что ты не робот

Безопасное литье в python

Как сделать безопасное приведение в Python

В С# я могу безопасно привести по ключевому слову, например:

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

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

Есть ли в Python что-то похожее на это?

4b9b3361

Ответ 1

Не думайте, но вы можете реализовать свои собственные:

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

Я верю, вы слышали о " 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

Есть что-то подобное:

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

Ответ 4

Кастинг имеет смысл только для переменной (= фрагмент памяти, содержимое которой может меняться)

В Python нет переменных, содержимое которых может измениться. Есть только объекты, которые не содержатся ни в чем: у них есть само существование. Тогда тип объекта не может измениться, AFAIK.

Тогда, кастинг не имеет смысла в Python. Это моя вера и мнение. Поправьте меня, если я ошибаюсь, пожалуйста.

.

Поскольку кастинг не имеет смысла в Python, нет смысла пытаться ответить на этот вопрос.

Вопрос раскрывает некоторые недоразумения оснований Python, и вы получите больше прибыли, получая ответы, объяснив, что привело вас к мысли, что вам нужно что-то бросить