如何修复'TypeError:-:'NoneType'和'int'不受支持的操作数类型

时间:2019-07-31 20:58:30

标签: python python-3.x

我已经工作了一个多小时,无法使我的功能通过单元测试。我的代码如下:

def miles_to_laps(x):
  laps = float(x * 4)
  return print('%0.2f' % laps)

if __name__ == '__main__':
  user_miles = float(input())
  miles_to_laps(user_miles)

输出是正确的,但是当它执行单元测试时,我得到了正确的答案,但是之后却抛出错误。我也在下一个实验中尝试过,它正在做同样的事情。请参阅下文。

例如,如果输入为2.2 我得到8.80

但如果输入为miles_to_laps(1.5) 我得到

6.00
Traceback (most recent call last):
  File "zyLabsUnitTestRunner.py", line 10, in <module>
    passed = test_passed(test_passed_output_file)
  File "/home/runner/local/submission/unit_test_student_code/zyLabsUnitTest.py", line 20, in test_passed
    diff_amount = student_result - 6
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
4: Unit test

2 个答案:

答案 0 :(得分:0)

看来问题不在给定的代码内,通过我的测试,它可以很好地工作。也许是因为您尝试使用的任何功能都不支持浮点格式

编辑:刚发现问题,您从函数返回了None值,您不能从中减去

修复:将函数返回一个变量, 并执行这样的代码- (浮动(可变)-6) 可以让您获得以前失败的结果

答案 1 :(得分:0)

您的问题是您要从函数中返回None,但是其他一些代码希望您正在return输入一个数字。

此行不符合您的预期:

return print('%0.2f' % laps)

这会打印出圈数(带两位小数),但随后返回print返回的值,该值始终为None。如果您想返回该数字,则可能应该只进行return laps。如果需要,呼叫者可以处理打印。可能您想同时打印并返回该值,在这种情况下,您将需要使用单独的语句:

print('%0.2f' % laps)
return laps