Python에서 함수가 정의되지 않음 오류

Salman Mehmood 2023년6월21일
  1. Python에서 선언 전에 함수 호출을 피하십시오.
  2. Python에서 맞춤법이 틀린 변수 또는 함수 이름을 사용하지 마십시오.
  3. Python에서 가져오기 없이 내장 모듈 사용 방지
  4. Python에서 범위를 벗어난 변수 문제 수정
Python에서 함수가 정의되지 않음 오류

이 설명을 통해 함수가 스크립트에 있음에도 불구하고 Python 프로그램이 NameError: name '<functionName>' is not defined와 같은 오류를 표시하는 경우가 무엇인지 배우게 됩니다.

또한 맞춤법이 틀린 변수나 내장 함수를 가져오기 없이 사용할 때 어떤 일이 발생하는지, 그리고 파이썬에서 이러한 오류를 피하는 방법도 배웁니다.

Python에서 선언 전에 함수 호출을 피하십시오.

Python에서 NameError: function is not defined가 발생하는 데는 여러 가지 이유가 있으며 이 오류가 발생하는 가장 일반적인 이유에 대해 논의할 것입니다. 프로그램에서 정의하기 전에 함수를 호출하면 Python 인터프리터가 함수 정의를 찾을 수 없습니다.

이 경우 함수는 보이지 않으며 Python 인터프리터는 아직 함수 정의를 만나지 않았습니다. 따라서 파이썬 인터프리터는 혼란스러워하고 오류를 던질 것입니다. 즉, 인터프리터에 따라 함수가 정의되지 않았다는 의미입니다.

이에 대한 간단한 예를 살펴보겠습니다. 이 프로그램에서는 함수를 정의하기 전에 call 문을 작성했습니다. 인터프리터는 Python 프로그램을 한 줄씩 실행하기 때문에 첫 번째 줄부터 실행을 시작할 때 특정 함수 호출을 만나지만 Hello()가 무엇인지 모릅니다.

Hello()


def Hello():
    print("I will never be called")

이 Python 스크립트를 실행하면 함수인지 헷갈릴 것이고, Python 인터프리터는 멈추고 오류를 던질 것입니다. 이것은 이 함수의 정의가 함수 호출 후에 나타나기 때문입니다. 그렇기 때문에 함수를 정의하기 전에는 함수를 호출하거나 호출할 수 없습니다.

NameError: name 'Hello' is not defined

이 오류를 수정하려면 호출하기 전에 함수를 정의해야 합니다.

Python에서 맞춤법이 틀린 변수 또는 함수 이름을 사용하지 마십시오.

이 오류가 발생하는 또 다른 이유는 사용자가 함수의 올바른 철자를 정의하는 데 실수를 할 때입니다. 이것이 사용자에게 이러한 유형의 오류가 발생하는 이유입니다. 파이썬은 대소문자를 구분하므로 소문자와 대문자는 다른 함수가 됩니다.

철자가 틀린 변수를 얻었을 때 인터프리터가 어떻게 행동하는지 보여주는 예를 살펴봅니다.

Orange = "orange"

for i in orange:
    print(i)

출력:

NameError: name 'orange' is not defined

Python 스크립트를 실행하면 'orange' is not defined라는 오류가 발생하는데 이번에는 철자를 잘못 입력한 것이 아닌데 이 변수를 정의했는데도 왜 이런 오류가 발생할까요? 대문자로 시작하는 변수를 정의하고 소문자로 접근을 시도하기 때문입니다.

동일한 시나리오가 기능에 적용됩니다. Orange 변수를 orange로 재정의하면 작동합니다.

orange = "orange"

for i in orange:
    print(i)

출력:

o
r
a
n
g
e

Python에서 가져오기 없이 내장 모듈 사용 방지

Python 프로그램을 작성할 때 print(), input() 등과 같은 내장 함수를 사용하려는 경우 코드에서 사용할 수 있습니다. 파이썬에 내장되어 있지 않지만 특정 모듈에 있는 함수를 사용해야 할 때 어떻게 됩니까?

특정 모듈의 일부인 함수를 사용하려면 먼저 해당 모듈을 Python 프로그램으로 가져와야 합니다. 일부 초보자는 특정 모듈을 가져오는 대신 모듈에서 함수를 사용하려고 할 때 실패합니다. 예를 보세요.

이 프로그램에서 사용자는 임의의 값을 생성하려고 시도하지만 사용자가 이 코드를 실행하면 사용자는 앞에서 논의한 것과 동일한 오류가 발생합니다. 그 이유는 random인 모듈을 가져오지 않고 random() 함수에 액세스하려는 사용자가 실패하는 경우입니다.

Randome_Values = random.random()

print(Randome_Values)

출력:

NameError: name 'random' is not defined

사용자가 Python 스크립트에서 random 모듈을 가져올 때 작동합니다.

import random

Randome_Values = random.random()
print(Randome_Values)

출력:

0.07463088966802744

때때로 사용자는 Python 모듈을 직접 작성하지만 문제에 직면하고 동일한 오류가 발생합니다.

이는 사용자가 클래스를 가져온 후 다른 파일에서 함수를 호출하려고 하기 때문입니다. 그러나 사용자가 함수가 정의된 해당 파일을 저장하지 않았을 수 있으므로 이 오류가 발생합니다. 따라서 이 함수를 호출하기 전에 저장해야 합니다.

Python에서 범위를 벗어난 변수 문제 수정

대부분의 초보자가 실패하는 또 다른 이유는 범위를 벗어난 변수에 액세스하려고 시도할 때 동일한 오류가 발생하기 때문입니다. 더 잘 이해할 수 있는 예를 살펴보겠습니다.

def take_order():
    orders = input("Enter your orders and separate it using comma :").split(",")
    return orders


def Delete_Orders():
    deleted_orders = input("Enter your order name which you want to cancel :")
    orders.remove(deleted_orders)
    return orders


print(take_order())

print(Delete_Orders())

이 Python 스크립트를 실행하면 take_order() 기능이 올바르게 작동하지만 주문 목록에서 주문을 삭제하기 위해 Delete_Orders() 기능을 호출하면 오류가 발생합니다.

NameError: name 'orders' is not defined

이는 orders 변수가 take_order() 함수에 정의되어 있고 Delete_Orders() 함수에서 액세스하려고 하기 때문입니다. 그렇기 때문에 실행 제어가 주문 목록에서 항목을 제거하는 위치에 도달하는 이유입니다. 범위를 벗어나 액세스하고 있기 때문에 오류가 발생합니다.

이 문제를 해결하려면 빈 문자열을 저장하는 변수를 선언해야 하며 변수 이름은 orders가 됩니다. 그런 다음 orders 변수라고 하는 global 키워드를 사용하여 재사용할 수 있도록 해야 합니다.

orders = ""


def take_order():
    global orders
    orders = input("Enter your orders and separate it using comma :").split(",")
    return orders


def Delete_Orders():
    deleted_orders = input("Enter your order name which you want to cancel :")
    orders.remove(deleted_orders)
    return orders


print(take_order())
print(Delete_Orders())

출력:

Enter your orders and separate it using comma :pizza,drink,water
['pizza', 'drink', 'water']
Enter your order name which you want to cancel :water
['pizza', 'drink']
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

관련 문장 - Python Error