i have a irrational error, code:
#====================================================#
#X Programming Language 2022(for Jadi) License: GPL #
#====================================================#
from os import system #importing system func. for cmd
code_location = "" #saving code location in this
code = "" #saving code in this
def main(): #main func.
code_location = input() #get code location from user
code = get_code() #cal get_code and save res to code var
print(code) #print code
end() #calling end
def get_code(): #get_code func. for getting code from file
code_file = open(code_location, 'r') #openning file with method read and saving to code_file
res = code_file.readlines() #saving the content from file to res
return res #returning res
def compiler(): #compiler func. for compiling code
pass
def end(): #when program end...
input("Press Enter to Countinue...")
if __name__ == "__main__":
main()
and this is code directory: enter image description here
running:
Short answer: Your two code_location
variables are not the same thing.
Variables have a property called a scope, which is essentially which context they belong to. Unless specified otherwise, variables within a function exist only within that function. Consider:
a = 0
def set_a():
a = 1
set_a()
print(a)
This will print 0
. This is because the a
variable within the function set_a
is actually a different variable to the a
defined in line 1. Although they have the same name, they point to different places in memory.
There are a few ways to do this:
Either, you can set the scope of a within the function to global
(instead of local
). What this does is now, instead of a
within the function pointing to a different memory location, it points to the same memory location as a
outside the variable. This is done like so:
a = 0
def set_a():
global a
a = 1
set_a()
print(a)
In this case, a
will be set to 1, and "1" will be printed
Another way to do this, and may be more relevant in your circumstance, is to pass the value as a variable to the function. In your case, you are using code_location
as the file path, so therefore what you want to pass code_location
into the function. You would then have to define your function like this:
def get_code(code_location):
and call the function (from your main
function) like this:
code = get_code(code_location)
When operating on files, it is best practice to use a with
block. This handles closing your file when you are done with it, and can prevent corruption of files in the rare case that something goes wrong with your code. This can be done like this:
with open(code_location, 'r') as code_file:
res = code_file.readlines()
return res