Безопасное литье в 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 что-то похожее на это?
Ответы
Ответ 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, и вы получите больше прибыли, получая ответы, объяснив, что привело вас к мысли, что вам нужно что-то бросить