gpt4 book ai didi

python - 使用变量时输入错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:34 24 4
gpt4 key购买 nike

所以我有这行代码:

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 的操作数类型。

最佳答案

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

  1. fc_no_rocks 是一个数字
  2. fc_no_rocks是一个表示数字的字符串
  3. fc_no_rocks 两者都不是

您检查以确保fc_no_rocks 不是None,但它可以是任何。因此,最好先进行更多的排他性检查,然后让你的 else 情况成为包罗万象的情况,即以上都不是/都不是。

在一团乱七八糟的三元链中,是这样的:

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)

最好写成多行,imo,但是一行写起来很有趣。这就像在您知道其他人将要穿过的门上放一桶水。成为维护您代码的人真是太糟糕了……! (顺便说一句,确保你在写完这类东西后辞职,这样你就不必成为维护它的人。)

无论如何,输出:

>>> 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

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

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

关于python - 使用变量时输入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17733478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com