Open In App

Nameerror: Name ‘__File__’ Is Not Defined” in Python

Last Updated : 02 Feb, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

One common issue that developers encounter is the “NameError: name ‘file‘ is not defined.” This error typically occurs when trying to access the __file__ attribute in a context where it is not recognized. In this article, we’ll explore what this error means and discuss three scenarios where it might occur

What is Nameerror?

The __file__ attribute is a built-in variable in Python that represents the path to the current Python script or module. It is used to obtain the location of the script being executed. The “NameError: name ‘file‘ is not defined” error occurs when attempting to access this attribute in a context where it is not recognized or not available.

Syntax :

Traceback (most recent call last):
File "<filename>", line <line_number>, in <module>
print(__File__)
NameError: name '__File__' is not defined

Why does “Nameerror: Name ‘__File__’ Is Not Defined Occur?

Below, are the reasons that’s why “Nameerror: Name ‘__File__’ Is Not Defined occurs.

  • Using __file__ in Module-Level
  • Running as Compiled Module
  • Typos Mistake

Using __file__ in Module-Level

If you are using __file__ at the module level (not within a function or class) and running the script directly, it should work. However, if you import that script as a module elsewhere, the __file__ attribute may not be defined in the context of the importing script.

Python3




def print_file_path():
  print(__file__)
 
print_file_path()


      1 def print_file_path():
----> 2 print(__file__)
3
4 print_file_path()

NameError: name '__file__' is not defined

Running as Compiled Module

If your script is compiled or frozen into a standalone executable, the __file__ attribute might not be available or might not represent the original script file.

Screenshot-2024-01-25-203854

Running as a Compiled Module

Above scenarios may cause the “Nameerror: Name’__file__’ is not defined ” in Python.

Typos Mistake

In below example, the code print(__File__) will raise a NameError because the correct attribute name is __file__, not __File__. In Python, attribute names are case-sensitive, meaning that the capitalization of letters matters.

Python3




print(__File__)


----> 1 print(__File__)
2

NameError: name '__File__' is not defined

Fix the NameError: name ‘__file__’ in Python?

Below, are the approaches to solve the “Nameerror: Name ‘__File__’ Is Not Defined” In Python.

Check if __file__ is defined:

Before using __file__, you can check if it is defined to avoid the NameError . as below code checks if the `__file__` attribute is present in the global namespace, printing its value if found, otherwise indicating that the script is not being run as a file.

Python3




if '__file__' in globals():
  print(__file__)
else:
  print('Script is not being run as a file')


Output :

Script is not being run as a file

Using try-except block

Below code includes a try-except block to catch the NameError in case the __file__ attribute is not defined in a specific context, ensuring that the script doesn’t crash due to the error. Instead, it prints a message indicating that the file path is not available.

Python3




def print_file_path():
    try:
        print(__file__)
    except NameError:
        print("File path not available.")
 
print_file_path()


Output

File path not available.

Check For Typos

Ensure that you are using the correct case for __file__. It is case-sensitive, and using __File__ (with an uppercase ‘F’) will result in a NameError.

Python3




print("__file__")


Output

__file__

By applying these suggestions, you should be able to resolve the “NameError: name ‘file’ is not defined” issue in your Python script.

Conclusion

In conclusion, resolving the “NameError: name ‘File’ is not defined” in Python involves careful attention to detail and adherence to Python’s case sensitivity. Confirm that you are using the correct variable name, which should be __file__ with a lowercase ‘f’. Additionally, make sure you are running your script in an appropriate context, such as executing it as a file from the command line. Verifying the script’s scope and checking for any potential



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads