如何在 Python 中进行安全转换
在 C# 中,可以使用关键字 as 进行安全转换,例如:
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有类似于这个的东西吗?
如何在 Python 中进行安全转换
在 C# 中,可以使用关键字 as 进行安全转换,例如:
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有类似于这个的东西吗?
不要认为你不能,你可以自己实现:
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
TypeError
异常。 - d-d我知道这是一篇旧文章,但这可能对某些人有所帮助。
x = int(word) if word.isdigit() else None
.isdecimal()
和.isnumeric()
。如果你想测试只有普通数字,则.isdecimal()
最严格:它将考虑0到9的数字有效,但将对类似于¹²³
的上下标数字返回False。这个问题有一个很好的讨论,特别是来自'Henry Keiter'的答案。 - Andrew Richardsword = '⓪③⑧'
,因为这会导致int()
失败并引发错误。我猜想使用isdecimal()
而不是isdigit()
可以使其按预期工作。 - lapin我相信你已经听说过“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
# ...
有类似的内容:
>>> 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
except ValueError:
,否则它会捕获拼写错误、语法错误等。 - Ben Hoyt强制类型转换仅对变量有效(=内存块,其内容可以更改)
在Python中没有内容可以更改的变量。只有对象,它们不包含在任何东西中:它们本身存在。然后,据我所知,对象的类型不能更改。
因此,在Python中强制类型转换是没有意义的。这是我的信念和观点。如果我错了,请纠正我。
.
由于在Python中强制转换没有意义,因此回答这个问题是没有意义的。TypeError: unsupported operand type(s) for +: 'int' and 'str'
- Jason Capriotti