def main():
from time import sleep,perf_counter
from keyboard import is_pressed,send,write
from random import choice
slp,getTime,isp,snd,wrt,chc = sleep,perf_counter,is_pressed,send,write,choice
logpath = "C:/Users/USER/AppData/Roaming/.minecraft/logs/latest.log"
with open(logpath,"r") as file:
backloglength = len(file.readlines())
def getLastMessages():
global backloglength
with open(logpath,"r") as file:
temp = file.readlines()
out = [temp[i] for i in range(backloglength,len(temp))]
backloglength = len(temp)
return out
while True:
start = getTime()+3
print(getLastMessages())
while getTime() < start: pass
main()
пишет ошибку
out = [temp[i] for i in range(backloglength,len(temp))]
^^^^^^^^^^^^^
NameError: name 'backloglength' is not defined
откуда эта ошибка? переменная backloglength существует
Ошибка возникает потому, что переменная backloglength определена внутри функции main(), а функция getLastMessages() находится внутри этой же функции. Таким образом, переменная backloglength не является глобальной и не может быть использована внутри функции getLastMessages().
Для решения проблемы можно сделать переменную backloglength глобальной, добавив ключевое слово global перед ее определением в функции main().
Исправленный код будет выглядеть так:
def main():
from time import sleep,perf_counter
from keyboard import is_pressed,send,write
from random import choice
slp,getTime,isp,snd,wrt,chc = sleep,perf_counter,is_pressed,send,write,choice
logpath = "C:/Users/USER/AppData/Roaming/.minecraft/logs/latest.log"
with open(logpath,"r") as file:
global backloglength
backloglength = len(file.readlines())
def getLastMessages():
global backloglength
with open(logpath,"r") as file:
temp = file.readlines()
out = [temp[i] for i in range(backloglength,len(temp))]
backloglength = len(temp)
return out
while True:
start = getTime()+3
print(getLastMessages())
while getTime() < start: pass
main()
Избегайте использования глобальных переменных, вместо этого лучше передайте это значение как параметр к функции, которую вы вызываете.
def main():
from time import sleep,perf_counter
from keyboard import is_pressed,send,write
from random import choice
slp,getTime,isp,snd,wrt,chc = sleep,perf_counter,is_pressed,send,write,choice
logpath = "C:/Users/USER/AppData/Roaming/.minecraft/logs/latest.log"
global backloglength # Используйте ключевое слово global здесь
with open(logpath,"r") as file:
backloglength = len(file.readlines())
def getLastMessages():
global backloglength # Используйте ключевое слово global здесь
with open(logpath,"r") as file:
temp = file.readlines()
out = [temp[i] for i in range(backloglength,len(temp))]
backloglength = len(temp)
return out
while True:
start = getTime()+3
print(getLastMessages())
while getTime() < start: pass
main()
Ошибка возникает из-за того, что переменная backloglength объявляется внутри функции main(), но используется в функции getLastMessages(), которая является вложенной функцией. Поэтому она не видна внутри функции getLastMessages().
она существует в другой функции и даже не глобально