Python中的NameError - 无法调用函数

时间:2017-09-01 08:35:00

标签: python nameerror

我是Python新手。在我的模块 - Utility.py中,下面的函数包含一个人的年龄和性别。它返回此人必须根据其年龄和性别支付的费用。我不允许对此模块进行任何更改。

def get_fees(age, gender):
    if gender == 'M':
        if age >= 50:
            return 300 
        elif age >= 35:
            return 250
        else:
            return 150
    else:
        if age >= 50:
            return 320
        elif age >= 35:
            return 270
        else:
            return 160

我还创建了一个新模块PrintFees.py,我需要提示用户输入年龄和性别,然后将输入传递给我需要从Utility模块调用的函数(get_fees)。我还需要打印所需的费用。

以下是我的尝试:

import Utility
age= int(input("What's your age? " ))
gender = input("What's your gender? [M|F]")
#Print fees 
print("Your fees is $", Utility.get_fees(age,gender))

当我尝试运行时,会出现此错误消息。

Traceback (most recent call last):
File "printfees.py", line 7, in <module>
print("Your fees is $", Utility.get_fees(age,gender))
NameError: name 'Utility' is not defined

我该如何解决这个问题?感谢。

3 个答案:

答案 0 :(得分:0)

首先,您需要在与代码相同的文件夹中或在python目录中的站点包中使用Utility模块。如果它是实用程序代码中的类的名称。我将展示一个例子:

import Utility
Utility.className.functionName(arguments)

答案 1 :(得分:0)

首先你的目录结构是这样的

path/
 |
 |----__init__.py  
 |----Utility.py
 |----PrintFees.py

__init_.py

的目的

在Utility.py

 def get_fees(age, gender):

    if gender == 'M':
        if age >= 50:
            return 300 
        elif age >= 35:
            return 250
        else:
            return 150
    else:
        if age >= 50:
            return 320
        elif age >= 35:
            return 270
        else:
            return 160

在printfees.py

form Utility import get_fees


age= int(input("What's your age? " ))
gender = input("What's your gender? [M|F]")
#Print fees 
print("Your fees is $ %s", str(get_fees(age,gender)))

答案 2 :(得分:-1)

我猜你的问题是get_fees函数中的缩进:

而不是:

def get_fees(age, gender):

if gender == 'M':
    if age >= 50:
        return 300 
    elif age >= 35:
        return 250
    else:
        return 150
else:
    if age >= 50:
        return 320
    elif age >= 35:
        return 270
    else:
        return 160

这样做:

def get_fees(age, gender):

    if gender == 'M':
        if age >= 50:
            return 300 
        elif age >= 35:
            return 250
        else:
            return 150
    else:
        if age >= 50:
            return 320
        elif age >= 35:
            return 270
        else:
            return 160