测试/验证read_input时发生TypeError(从返回函数中考虑):python3

时间:2019-04-21 05:27:03

标签: python python-3.x

非常早期的Python编程入门,现在遇到了我认为是我的返回函数的错误。

我在哪里:

在收到@Kaushal的一些很好的建议后,更新了原始帖子。

当我测试“输入患者人数”的输入时,我不断收到以下错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

我认为它必须与顶部的返回函数以及确定了错误的输入有关,然后在“无”之后进行任何输入。

任何有关如何解决此错误的建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

很少需要照顾的指针:

  1. 使用功能来完成重复的工作
  2. 特别在读取输入的情况下使用执行处理
  3. 使用字符串格式

注意:使用递归读取输入,直到没有输入有效输入为止

下面是问题的实现,它将帮助您了解如何在python中使用函数和错误处理来实现问题

宏营养素计算器

def validate_is_positive_numeric(val):
    try:
        val = float(val)
        if val <= 0:
            print("Enter a valid positive value")
            return None, False
    except ValueError:
        print("Enter a valid numeric value")
        return None, False

    return val, True


def read_input(text):
    value, success = validate_is_positive_numeric(input(text))
    if not success:
        value = read_input(text=text)

    return value


def calculate_average(macro_name, total_quantity, total_patients):
    avg = total_quantity/int(total_patients)
    print("Amount of {} (g) required : {}".format(macro_name, avg))


num_patients = read_input("Enter the number of patients: ")


protein, fats, carbs, kilojoules = 0, 0, 0, 0
for _ in range(int(num_patients)):
    protein += read_input("Amount of protein (g) required: ")
    fats += read_input("Amount of fats (g) required: ")
    carbs += read_input("Amount of carbohydrates (g) required: ")
    kilojoules = 4.18*(4*protein + 4*carbs + 9.30*fats)

calculate_average(macro_name="Protein", total_quantity=protein, total_patients=num_patients)
calculate_average(macro_name="Fats", total_quantity=fats, total_patients=num_patients)
calculate_average(macro_name="Carbohydrates", total_quantity=carbs, total_patients=num_patients)
calculate_average(macro_name="Kilojoules", total_quantity=kilojoules, total_patients=num_patients)