Продолжайте получать глобальное имя не определено ошибка - PullRequest
1 голос
/ 17 июня 2011
def defineType(riskCode):
    if riskCode == 1:
        riskType = High
    else:
        if riskCode == 2:
            riskType = Moderate
        else:
            if riskCode == 3:
                riskType = Low
            else:
                if RiskCode == 4:
                    riskType = No

Это часть программы, над которой я работаю для класса ...

# Global Variables
custName = input('Please enter your name: ')
custAge = int(input('Please enter your age: '))
custViolation = int(input('Please enter the number of violations: '))

riskCode = 0
estimatePrice = 0
riskType = none

Это моя глобальная переменная ...

Traceback (most recent call last):
  File "C:\Users\Alli\Downloads\HwyRobbery.py", line 13, in <module>
    riskType = none
NameError: name 'none' is not defined

Это ошибка, которую я получаю с различными вариациями, в зависимости от того, какие изменения я делаю, чтобы попытаться решить проблему

Любая помощь будет принята с благодарностью !!!

Спасибо! Алли

Ответы [ 6 ]

14 голосов
/ 17 июня 2011

Это None, а не none.Python чувствителен к регистру.

8 голосов
/ 17 июня 2011

Первоначальная проблема, которую я вижу, состоит в том, что none не является встроенным значением в Python.None - это все же.

Кроме того, башня вложенных операторов if в первой функции не нужна.Выровняйте это!

def defineType(riskCode):
    if riskCode == 1:
        riskType = High
    elif riskCode == 2:
        riskType = Moderate
    elif riskCode == 3:
        riskType = Low
    elif RiskCode == 4:
        riskType = No

Это не ошибка, но гораздо более читабельно, не так ли?(Проще набрать тоже:)

Кроме того, я так понимаю, что High, Moderate, Low и No определены в других местах вашего кода?Если вы используете их как перечисляемые константы (то есть как набор уникальных целых чисел, значения которых не меняются), HIGH, MODERATE, LOW и NO будут более идиоматическими.

И на самом деле, если бы вы сделали это, вся функция могла бы быть уничтожена следующим образом:

HIGH = 1
MODERATE = 2
LOW = 3
NO = 4

Теперь вам не нужно их вообще отображать;и вы можете просто назначить riskCode на riskType, хотя это может быть немного избыточно!

riskType = riskCode

Если вы хотите получить строки из кодов риска, попробуйте второй словарь от ArtsiomОтвет Рудзенки .

Наконец ... Я бы предложил поместить эти коды в их собственное пространство имен:

class Risk(object):
    HIGH = 1
    MODERATE = 2
    LOW = 3
    NO = 4

Затем вы можете ссылаться на них так:

if riskCode == Risk.HIGH: do_something()

Теперь вы можете использовать короткие слова, такие как NO для других вещей.

3 голосов
/ 17 июня 2011

Нет необходимости использовать функцию, чтобы использовать функцию для отображения рисков, вы можете просто использовать следующее:

riskmapping = {1:High, 2:Moderate, 3:Low, 4:No}

Но если High, ... No - это не экземпляры или переменные, а просто строки, отличные от:

riskmapping = {1:'High', 2:'Moderate', 3:'Low', 4:'No'}

Использование:

highRisk = riskmapping[1]

или

if riskmapping[currentRiskCode]:
    #do smth
1 голос
/ 17 июня 2011

Если вы изменяете глобальные переменные в функции, отличной от той, которая была объявлена, вам не нужно использовать ключевое слово global.


def defineType(riskCode):
    global riskType

    if riskCode == 1:
        riskType = High



1 голос
/ 17 июня 2011

Помимо всего прочего, мой вклад в простоту:

riskCodes = {1: 'High', 2: 'Moderate', 3: 'Low', 4: 'No'}

def defineType(riskCode):
    riskType = riskCodes[riskCode]
0 голосов
/ 17 июня 2011

Настройка riskType внутри вашей функции является локальной для этой функции и не влияет на значение в глобальном. Вы должны указать своей функции использовать глобальную переменную, поставив global riskType перед кодом, который пытается ее изменить.

None следует использовать с заглавной буквы.

Полагаю, вы хотели установить в параметре riskType строку, и поэтому эти значения должны быть заключены в кавычки.

Python имеет elif для else if.

Исправленный код:

# Global Variables
riskCode = 0
estimatePrice = 0
riskType = None

def defineType(riskCode):
    global riskType
    if riskCode == 1:
        riskType = "High"
    elif riskCode == 2:
        riskType = "Moderate"
    elif riskCode == 3:
        riskType = "Low"
    elif RiskCode == 4:
        riskType = "No"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...