迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

解决 Python中错误 TypeError: Not All Arguments Converted During String Formatting

作者:迹忆客 最近更新:2023/05/30 浏览次数:

Python 中的字符串格式化可以通过多种方式完成,模 (%) 运算符就是其中一种方法。 它是 Python 中最古老的字符串格式化方法之一,以错误的方式使用它可能会导致 TypeError: not all arguments converted during string formatting

不仅如此,许多其他原因也可能导致同样的情况。 让我们详细了解此错误以及修复它的可能解决方案。

TypeError 是当我们尝试对不受支持的对象类型进行操作时引发的 Python 异常。 在很多情况下我们都会遇到此错误,但在本文中,我们将研究因字符串格式不正确而导致的 Python TypeError。

话不多说,让我们开始吧!


Python 中错误 TypeError: Not All Arguments Converted During String Formatting 的原因及解决方法

Python 中可能会出现 TypeError: not all arguments converted during string formatting 的原因有很多。 让我们一一讨论它们,以及可能的解决方案。

Python对错误数据类型的操作

看下面给出的例子。 在这里,我们将用户的年龄作为输入,然后使用取模运算符 (%)。

结果存储在变量 ans 中,然后在打印语句中将其格式化为字符串。 但是当我们运行这段代码时,我们得到了 TypeError

发生这种情况是因为 Python 接受字符串形式的输入。 这意味着作为输入的值 19 被 Python 认为是 str 数据类型。

但是我们可以在字符串上使用模运算符 (%) 吗? 不,因此,我们收到此错误。

age = (input("Enter your age: "))
ans = age % 10
print("Your lucky number is:", ans)

输出:

Python 中错误 TypeError- Not All Arguments Converted During String Formatting

要解决此问题,我们必须使用 int() 函数将输入作为整数。 这是在下面完成的。

age = int(input("Enter your age: "))
ans = age % 10
print("Your lucky number is:", ans)

输出:

解决 Python 中错误 TypeError- Not All Arguments Converted During String Formatting

您可以看到,这次我们得到了所需的输出,因为 int() 函数将输入转换为整数数据类型,我们可以在其上使用模运算符 (%)。

Python 中字符串插值运算符缺少格式说明符

这种情况与我们上面讨论的情况有点相似。 看下面给出的例子。

输出显示错误发生在第 2 行。但是你能猜出原因吗?

答案很简单。 我们知道在 Python 中单引号或双引号内的任何东西都是字符串。

在这里,值 19 被双引号括起来,这意味着它是一个字符串数据类型,我们不能在它上面使用模运算符 (%)。

age = "19"
if(age%10):
    print("Your age is a lucky number")

输出:

Python 中字符串插值运算符缺少格式说明符

为了纠正这个问题,我们将使用 int() 格式说明符,如下所示。

age = "19"
if(int(age)%10):
    print("Your age is a lucky number")

输出:

Your age is a lucky number

这次代码运行正常。

Python 中格式说明符和值的数量不等

我们知道我们在字符串格式化期间放置的格式说明符与要格式化的值的数量一样多。 但是,如果值的数量多于或少于字符串中指定的格式说明符的数量怎么办?

看看这段代码。 在这里,我们有三个变量并且只想将其中两个插入到字符串中。

但是当我们在 print 语句中传递参数时,我们传递了所有三个参数,这无疑会导致 TypeError。

lead_actor = "Harry Potter"
co_actor = "Ron Weasley"
actress = "Hermione Granger"

print("The males in the main role were: %s and %s." %(lead_actor,co_actor, actress ))

输出:

Python 中格式说明符和值的数量不等

让我们从参数列表中删除最后一个变量 actress,然后重新运行该程序。

lead_actor = "Harry Potter"
co_actor = "Ron Weasley"
actress = "Hermione Granger"

print("The males in the main role were: %s and %s." %(lead_actor,co_actor))

输出:

The males in the main role were: Harry Potter and Ron Weasley.

您可以看到这次代码运行良好,因为字符串中格式说明符的数量等于作为参数传递的变量的数量。

请注意,要使用的格式说明符取决于值的数据类型,在本例中为 %s,因为我们正在处理字符串数据类型。

在 Python 中的同一字符串中使用不同的格式说明符

我们知道有几种方法可以在 Python 中格式化字符串,但是一旦选择了一种方法,就必须在单个字符串中仅遵循该方法。 换句话说,您不能在一条语句中混合使用不同类型的字符串格式化方法,因为这会导致 TypeError: not all arguments converted during string formatting

查看下面的代码可以更好地理解这个概念。

我们在字符串中使用占位符 ({}) 来格式化此字符串,但我们不像之前那样将参数作为元组传递。 相反,其中一个变量前面有模运算符 (%),而另一个则没有。

这就是导致 TypeError 的原因。

lead_actor = "Harry Potter"
co_actor = "Ron Weasley"
actress = "Hermione Granger"

print("The males in the main role were: {0} and {1}." % lead_actor,co_actor)

输出:

在 Python 中的同一字符串中使用不同的格式说明符

为了解决这个问题,我们可以做两件事。

  1. 如果要在字符串中使用占位符 ({}),则必须使用带有点 (.) 运算符的 format() 方法来传递参数。 这是在下面完成的。
    lead_actor = "Harry Potter"
    co_actor = "Ron Weasley"
    actress = "Hermione Granger"
    print("The males in the main role were: {0} and {1}.".format(lead_actor, co_actor))
    
    输出:
    The males in the main role were: Harry Potter and Ron Weasley.
    
    你可以看到这次代码运行正常。
  2. 另一种方法是放弃使用占位符 ({}) 并在其位置使用格式说明符,同时将参数作为元组传递,前面加上模运算符 (%)。 这是按如下方式完成的。
    lead_actor = "Harry Potter"
    co_actor = "Ron Weasley"
    actress = "Hermione Granger"
    print("The males in the main role were: %s and %s." % (lead_actor, co_actor))
    
    输出:
    The males in the main role were: Harry Potter and Ron Weasley.
    

    请注意 ,用于格式化的模运算符 (%) 是旧式的,而另一方面,将占位符与 .format() 方法一起使用是 Python 中字符串格式化的新式方法。

这就是本文的内容。


总结

在本文中,我们讨论了导致 Python 中 TypeError: Not all arguments converted during string formatting 的各种原因,以及可能的修复方法。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 错误 TypeError: Unhashable Type: List

发布时间:2023/05/17 浏览次数:112 分类:Python

本文将讨论 TypeError: unhashable type: 'list' 以及如何在 Python 中修复它。因为 Python 字典只接受可散列数据类型作为它们的键,而列表是不可散列的。

解决 Python 中 TypeError: An Integer Is Required 错误

发布时间:2023/05/16 浏览次数:149 分类:Python

在 Python 代码中发生的另一个最常见的错误是 TypeError。本文将展示我们如何在 Python 中得到 TypeError。 此外,我们将通过使用必要的示例和解释来讨论该主题,以使该主题更容易理解。

Python 中错误 TypeError: Must Be Real Number, Not STR

发布时间:2023/05/16 浏览次数:168 分类:Python

TypeError: must be real number, not str 错误涉及使用错误的类型和非实数,在本例中为 str 类型。使用 float() 或 int() 解决Python 中 TypeError: must be real number, not str

Python 错误 TypeError: Iteration Over Non-Sequence

发布时间:2023/05/16 浏览次数:69 分类:Python

当您尝试迭代不可迭代的对象时,会出现错误 TypeError: iteration over non-sequence 。 现在您已经了解了 TypeError 的原因,让我们在 Python 中重新创建非序列错误的迭代。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便