我想知道转换为字符串,即str(sth)是否会引发一个异常,比如float(sth)

try:
    x = str(value)
except ValueError:
    x = None

确保执行不会因为转换失败而停止.

这在Python2和Python3中是否也有所不同,因为str类在它们中是不同的??

推荐答案

如果遇到在__str__中显式引发异常的自定义类(如果未定义__str__,则为__repr__).或者,例如,从__str__返回bytes对象的类:

class Foo:
    def __str__(self):
        return b''

str(Foo()) # TypeError: __str__ returned non-string (type bytes)

但就我个人而言,我已经看到了这一点,我很确定没有人看到;那样做是愚蠢的.同样,在执行__str__或边缘 case 时犯下的愚蠢错误可能会导致另一个Exception.看看如何将Python推广到这些边缘 case 是很有趣的(请看这里的@user2357112个答案).

除此之外,在这种情况下,没有内置程序通常会引发异常,因为它在Py2Py3中为所有内置程序定义.

对于用户定义的类,如果未在Python3中定义,str将默认使用object.__str__,而在Python2中,如果类是新样式类(继承自object),则使用object.__str__.

如果一个类是一个旧式的类I believe,那么classobj.__str__用于类,instance.__str__用于实例.

一般来说,我不会明白这一点,特殊情况对这一点来说还不够特殊.

Python-3.x相关问答推荐

如何使用PySide6创建切换框架?

Django内置注销视图`不允许的方法(GET):/USERS/LOGOUT/`

如何将多个字典合并到一个列中,并为不同的行使用相同的键

基于其他列的条件向Panda数据框中添加值到新列

pytorch 中 mps 设备的 manual_seed

pytorch 中 mps 设备的 manual_seed

如何通过从特定列创建分组多标题来reshape 数据框?

Pandas 按值和索引对 DF 进行排序

使用正则表达式捕获组解析地址

两个字符串之间的正则表达式匹配?

django rest框架中的save()、create()和update()有什么区别?

无法在 macOS 上的 Anaconda3 python3.6 上安装 OpenCV3

Python:如何判断一个项目是否被添加到一个集合中,没有 2x(hash,lookup)

pythondecorator中的变量范围

如何模拟 Django 模型对象(及其方法)?

是否在未完成初始化的对象上调用了 del?

如何将二进制(字符串)转换为浮点值?

当 None 被传递时,如何将默认值应用于 python 数据类字段?

是否可以在每个路由的基础上限制 Flask POST 数据大小?

如何强制 Sphinx 使用 Python 3.x 解释器