Python 错误 TypeError: __str__ Returned Non-String but Printing Output

本文旨在解决当我们尝试打印字符串而不是在函数中使用 return 语句时出现的问题。


Python 返回非字符串错误但打印输出

以下代码显示了 TypeError: str returned non-string,但它仍然打印输出。

示例代码:

class xy:def __init__(self, x, y):self.x = xself.y = ydef __str__(self):print('X={0}, Y={1}')if __name__ == "__main__":x_y = xy('value of x is 1','value of y is 2')print(x_y)

输出:

TypeError                                 Traceback (most recent call last)
<ipython-input-1-7b40a083df6c> in <module>10 if __name__ == "__main__":11     x_y = xy('value of x is 1','value of y is 2')
---> 12     print(x_y)TypeError: __str__ returned non-string (type NoneType)

为什么我们会收到错误,即 __str__ 返回非字符串(类型 NoneType)? 首先,我们需要了解 __str__ 运算符的工作原理。

__str__ 运算符主要用于返回字符串,但我们主要使用它来打印字符串。 Python 中的 __str__ 有两个术语,可互换使用,运算符或 Dunder 方法。

上述代码中,__str__方法直接调用了print()函数,打印了字符串,但没有返回字符串; 这就是它显示上述错误的原因。

此外,我们的 __str__ 运算符打印字符串并且不返回任何内容; 这就是为什么它错误地使用 None 的原因。


解决 TypeError: __str__ Returned Non-String

我们可以使用 __str__ 方法中的 return 语句来解决这个问题。 所以,我们必须在 __str__ 方法中返回字符串而不是打印它。 请参见以下代码。

示例代码:

class xy:def __init__(self, x, y):self.x = xself.y = ydef __str__(self):return ('X={0}, Y={1}').format(self.x, self.y)if __name__ == "__main__":x_y = xy('value of x is 1','value of y is 2')print(x_y)  

输出:

X=value of x is 1, Y=value of y is 2

上面的代码还有一个问题。 问题是,如果我们返回的值不是字符串,它会显示确切的错误,但这次,变量类型不是 None。

示例代码:

class xy:def __init__(self, x, y):self.x = xself.y = ydef __str__(self):return 123if __name__ == "__main__":x_y = xy('value of x is 1','value of y is 2')print(x_y) 

输出:

TypeError                                 Traceback (most recent call last)
<ipython-input-9-173c41d63dab> in <module>12 if __name__ == "__main__":13     x_y = xy('value of x is 1','value of y is 2')
---> 14     print(x_y)TypeError: __str__ returned non-string (type int)

为了解决这个问题,我们需要对值进行类型转换并用 str() 方法包装它,这意味着将变量的类型转换为字符串,因为这是 str() 方法的要求。

示例代码:

class xy:def __init__(self, x, y):self.x = xself.y = ydef __str__(self):return str(123)if __name__ == "__main__":x_y = xy('value of x is 1','value of y is 2')print(x_y)  

输出:

123

现在,代码针对所有可能的情况运行,因为我们解决了所有预期的问题并满足 str 方法的要求,即它只返回字符串值。


__str__ 使用 __repr__() 返回非字符串

__repr__() 方法与 str 方法做同样的事情。 请参见以下代码。

示例代码:

class calculate(object):def __init__(self, x, y, z):self.x = xself.y = yself.z = zdef __repr__(self):print ("(%r, %r, %r)" %(self.x, self.y, self.z))equation = calculate(1, 2, 3)
print(equation) 

输出:

(1, 2, 3)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-0ee74d4c74c8> in <module>8 9 equation = calculate(1, 2, 3)
---> 10 print(equation)TypeError: __str__ returned non-string (type NoneType)

上面的代码还打印了字符串,而不是从 __repr__() 方法返回它。 因此,我们可以使用 return 语句来解决它,而不是使用 __repr__() 方法打印字符串。

示例代码:

class calculate(object):def __init__(self, x, y, z):self.x = xself.y = yself.z = zdef __repr__(self):return str("(%r, %r, %r)" %(self.x, self.y, self.z))equation = calculate(1, 2, 3)
print(equation)   

输出:

(1, 2, 3)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试真题-靠谱的车-2023年OD统一考试(C卷)

题目描述: 程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。 出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。 比如: 1. 23再多一块钱就变为25; 2. 39再多一块…

力扣611题 有效三角形的个数 双指针算法

611. 有效三角形的个数 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例 1: 输⼊: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使⽤第⼀个 2) 2,3,4 (使⽤第⼆个 2) 2,2,3 ⽰例 2: 输⼊: nums [4,2,3,4] 输出: 4 解…

Topic和Partition

作用 主题作为消息的一级分类, 分区是对二级分类。分区是Kafka可伸缩性和水平扩展的关键, 也是多副本机制保证可用性的基础。分区可以有一到多个副本, 每个副本对应1个日志文件, 每个日志文件对应1到多个日志分段。每个日志分段又可以细分为日志文件, 索引文件和快照文件。 创…

CAP概念和三种情况、Redis和分布式事务的权衡

借鉴&#xff1a;https://cloud.tencent.com/developer/article/1840206 https://www.cnblogs.com/huanghuanghui/p/9592016.html 一&#xff1a;CAP概念和三种情况 1.概念&#xff1a; C全称Consistency&#xff08;一致性&#xff09;&#xff1a;这个表示所有节点返回的数…

轻易云AI:引领企业数智化转型提升企业AI效率

近期&#xff0c;轻易云AI与汤臣倍健的合作引起了业界的广泛关注。通过这一合作&#xff0c;轻易云AI不仅成功打造了集团小汤AI助手这一标志性的企业智能助手&#xff0c;更重要的是&#xff0c;这一合作凸显了轻易云AI作为专业AI应用集成专家的核心能力。轻易云AI已成功集成了…

Spring之RestTemplate详解

Spring之RestTemplate详解 1 RestTemplate1.1 引言1.2 环境配置1.2.1 非Spring环境下使用RestTemplate1.2.2 Spring环境下使用 RestTemplate1.2.3 Spring环境下增加线程号 1.3 API 实践1.3.1 GET请求1.3.1.1 不带参请求1.3.1.2 带参的get请求(使用占位符号传参)1.3.1.3 带参的g…

创建内存泄漏(js的问题)

如果没有有意识地编写代码来避免内存泄漏&#xff0c;那么内存泄漏几乎是不可避免的JavaScript问题。它们的发生方式有很多种&#xff0c;所以我们只重点介绍几种比较常见的情况。 内存泄漏实例1:对不存在的对象的悬空引用 考虑以下代码: var theThing null; var replaceTh…

Redis7--基础篇4(Redis事务)

Redis事务是什么 可以一次执行多个命令&#xff0c;本质是一组命令的集合&#xff0c;一个事务中的所有命令都会序列化&#xff0c;按顺序串行&#xff0c;而不会被其他命令插入。 其作用就是在一个队列中&#xff0c;一次性、顺序、排他的执行一系列命令。 Redis事务 VS 数据…

【每日一题】拼车+【差分数组】

文章目录 Tag题目来源解题思路方法一&#xff1a;差分 写在最后 Tag 【差分数组】【数组】【2023-12-02】 题目来源 1094. 拼车 解题思路 本题朴素的解题思路是统计题目中提到的每一个站点的车上人数&#xff0c;如果某个站点的车上人数大于车上的座位数直接返回 false&…

SSE4.2 指令集内置函数来加速32位循环冗余校验(CRC-32)计算

1、_mm_crc32_u8 为什么比查表快&#xff1f; _mm_crc32_u8 指令使用了 SIMD 技术&#xff08;即单指令多数据流技术&#xff09;&#xff0c;可以同时处理多个字节的数据。这些字节被打包成 64 位整数&#xff0c;然后使用单条 _mm_crc32_u64 指令计算它们的 CRC-32 校验和。…

基于 Vue、Datav、Echart 框架的 “ 数据大屏项目 “,通过 Vue 组件实现数据动态刷新渲染,内部图表可实现自由替换

最近在研究大数据分析&#xff0c;基于 Vue、Datav、Echart 框架的 " 数据大屏项目 "&#xff0c;通过 Vue 组件实现数据动态刷新渲染&#xff0c;内部图表可实现自由替换。部分图表使用 DataV 自带组件&#xff0c;可进行更改&#xff0c;详情请点击下方 DataV 文档…

flask中遇到ImportError: cannot import name ‘url_encode‘ from ‘werkzeug‘

报错信息 Traceback (most recent call last): File “book_management_sys.py”, line 5, in from forms import Login, SearchBookForm, ChangePasswordForm, EditInfoForm, SearchStudentForm, NewStoreForm, StoreForm, BorrowForm File “C:\pythonProject\pythonProject…

abapgit 安装及使用

abapgit 需求 SA[ BASIS 版本 702 及以上 版本查看路径如下&#xff1a; 安装步骤如下&#xff1a; 1. 下载abapgit 独立版本 程序 链接如下&#xff1a;raw.githubusercontent.com/abapGit/build/main/zabapgit_standalone.prog.abap 2.安装开发版本 2.1 在线安装 前置条…

【C++】类和对象——初始化列表和static修饰成员

首先我们来谈一下初始化列表&#xff0c;它其实是对于我们前边构造函数体内初始化的一种补充&#xff0c;换一种说法&#xff0c;它以后才是我们构造函数的主体部分。 我们先考虑一个问题&#xff0c;就是一个类里面有用引用或const初始化的成员变量&#xff0c;比如说&#xf…

HTML_web扩展标签

1.表格标签 2.增强表头表现 4.表格属性&#xff08;实际不常用&#xff09; 结构标签&#xff1a; 合并单元格&#xff1a; 更多请查看主页

从零开始,探索Spring框架的魅力与实践

Spring 1&#xff0c;介绍1.1 为什么要学?1.2 学什么? 2&#xff0c;Spring相关概念2.1 初识Spring2.1.1 Spring家族2.1.2 了解Spring发展史 2.2 Spring系统架构2.2.1 系统架构图2.2.2 spring主要内容 2.3 Spring核心概念2.3.1 目前项目中的问题2.3.2 IOC、IOC容器、Bean、DI…

影刀实例五,网页表单中多下拉框填写问题

一&#xff0c;背景 网页表单中&#xff0c;经常有这样一个场景&#xff0c;填写籍贯.并且是以三个下拉框表示&#xff0c;分别代表省&#xff0c;市&#xff0c;县.并且都是非标准的&#xff0c;不能直接使用影刀内置命令.常规思路是&#xff1a;分别处理省&#xff0c;市&…

万能的视频格式播放器

今天博主给大家带来一款“万能”的视频播放器——VLC Media Player&#xff0c;支持的文件格式非常多&#xff0c;大家快来一起看看吧&#xff01; VLC Media Player 是一款可播放大多数格式&#xff0c;而无需安装编解码器包的媒体播放器。可以播放 MPEG-1、MPEG-2、MPEG-4、D…

C语言-指针_02

指针-02 1. 指针的指针 概念&#xff1a;指针变量中存储的是指针的地址&#xff0c;又名 二维指针 语法&#xff1a; 数据类型 **p;示例&#xff1a; #include <stdio.h> int main(int argc, char const *argv[]) {int num 10;int *p1 &num;int **p2 &p1…