当前位置: 首页 > 知识库问答 >
问题:

使用变量时出现类型错误

孙星鹏
2023-03-14

我有一行代码:

fc = round((1+5*100)/100, 3) if fc_no_rocks == None else round(fc_no_rocks/100, 3)

它接受一个变量,其类型应为float。当我使用type()测试变量类型时,它返回:

>>>type(fc_no_rocks)
<type 'float'>

但是我一直收到一个错误,上面写着“/: str和int不支持的操作数类型”。

共有3个答案

公良文彬
2023-03-14

有一个for循环更改了变量,因此fc_no_rocks设置为无。这使得将fc变量切换到左侧时的逻辑,我替换的一个变量也是一个字符串。抱歉搞混了

罗金林
2023-03-14

为什么不确保无岩石是浮点数?

fc = round((1+5*100)/100, 3) if fc_no_rocks == None else round(float(fc_no_rocks)/100, 3)
乌鸿宝
2023-03-14

显然,fc_no_rocks是您案例中的字符串。该错误在您身上。最好检查几种情况:

  1. fc\u no\u rocks是一个数字
  2. fc\u no\u rocks是一个表示数字的字符串
  3. fc\u no\u rocks不是以上两种

您检查以确保fc_no_rocks不是,但它可以是任何东西。因此,最好首先进行更排他性的检查,然后让您的ore案例成为包罗万象的,即上述两者都不是/都不是。

在三元链的一个大混乱中,是这样的:

fc = round(float(fc_no_rocks)/100.0, 3) if isinstance(fc_no_rocks, str) and unicode(fc_no_rocks.replace('.','',1)).isnumeric() else round(fc_no_rocks/100.0, 3) if isinstance(fc_no_rocks, float) or isinstance(fc_no_rocks, int) else round((1+5*100)/100.0, 3)

我觉得最好用多行来写,但是写单行代码很有趣。这就像在你知道别人会走过的门上放一桶水。维护你的代码的人很糟糕...!(顺便说一句,确保你在写完这类东西后辞职,这样你就不必成为维护它的人。)

无论如何,输出:

>>> fc_no_rocks = "2.3"
>>> fc = ...
>>> fc
0.023
>>> fc_no_rocks = "foobar"
>>> fc = ...
>>> fc
5.01
>>> fc_no_rocks = 1.3
>>> fc = ...
>>> fc
0.013
>>> fc_no_rocks = 6340
>>> fc = ...
>>> fc
63.4

如果您想在语句中间进行调试,我有个好消息

>>> import sys
>>> fc_no_rocks = "foobar"
>>> fc = round(float(fc_no_rocks)/100.0, 3) if sys.stdout.write(str(type(fc_no_rocks))+"\n") or isinstance(fc_no_rocks, str) and unicode(fc_no_rocks.replace('.','',1)).isnumeric() else round(fc_no_rocks/100.0, 3) if isinstance(fc_no_rocks, float) or isinstance(fc_no_rocks, int) else round((1+5*100)/100.0, 3)
<type 'str'>
>>> fc
5.01

您可以滥用布尔值运算符的行为以及write()方法始终返回的事实!万岁!如果您想查看其表示形式,您也可以编写repr(fc_no_rocks)-对于获取字符串的内容和指示是,它是字符串很有用。

编辑:我正在运行Python 2.7.2,所以我必须添加小数点才能正确除法。呜呜!

 类似资料:
  • 我试图了解System.in input在Java是如何工作的,我创建了一些输入输出代码。我的目标是显示输入到控制台的所有内容,即使输入中有不同类型的变量(例如String、int)交替出现。当我逐行输入数据,并在每行后按Enter键-输出是正确的。但是,如果我将整个输入复制粘贴到控制台,那么在最后一个for循环的第一次迭代之后,代码就会停止,并等待enter。我该怎么做才能使它在没有输入的情况下

  • 我有2种类型的类型类,其中一种类型包含另一种类型 我想这样称呼我的类型类: 但这行不通。 错误:(34,23)找不到参数e的隐式值:com.playground.Valides[com.playground.MyModel1,model.version.type]val v=隐式[Valides[MyModel1,model.version.type]]错误:(34,23)没有足够的隐式方法参数:

  • 问题内容: 除了Swift,我还有这个问题。如何Type在泛型中使用变量? 我尝试了这个: This didn’t work either: 有没有办法做到这一点?我感觉到Swift只是不支持 它,并且给了我一些模棱两可的错误消息。 编辑:这是一个更复杂的示例,其中无法 使用通用函数标头来解决问题。当然,这没有任何意义, 但是我在代码中的某处合理地使用了这种功能 ,宁愿发布一个干净的示例而不是我的

  • 嗨,我正在制作一个程序,该程序应该采用字母等级并将其转换为 GPA 值。程序的第一部分取了一个百分比并将其转换为字母等级,现在我正在尝试将转换后的字母等级转换为 int 值。我们只允许使用开关盒。但是,在执行此操作时,我发现一个不兼容的类型错误:java.lang.String required: int。不确定我需要更改什么,有什么帮助吗? 谢谢。

  • 问题内容: 我正在尝试将React-redux与Typescript一起使用,当我尝试使用connect()和mapStateToProps注入道具时遇到类型错误。 我的组件如下所示: 商店看起来像这样 最后,我将类型定义为: 当我尝试编译代码时,出现以下错误: 有趣的是,即使代码抛出类型错误,它仍然可以正常工作。同样,将组件的prop接口更改为any也可以解决该问题。似乎类型系统无法理解这两个映

  • 我想更新我的变量,但我的代码有一个错误,我不知道哪里有错误