Python

Не работает код в python срочно помогите

 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 существует
Gleb Sitak
Gleb Sitak
9
Ошибка возникает потому, что переменная 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()
N-
Nikon -.
156
Лучший ответ
Алексей Новожилов Не верьте правдоподобным, но часто неправильным ответам чатгпт, граждане!
Избегайте использования глобальных переменных, вместо этого лучше передайте это значение как параметр к функции, которую вы вызываете.
Gleb Sitak ты даже код не читал
 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()
Алексей Нечай
Алексей Нечай
25 860
Gleb Sitak попробуй без chat gpt
Взял и поломал...
Ошибка возникает из-за того, что переменная backloglength объявляется внутри функции main(), но используется в функции getLastMessages(), которая является вложенной функцией. Поэтому она не видна внутри функции getLastMessages().
она существует в другой функции и даже не глобально