почему не находит переменную в другой функции python

import sqlite3
import random


db = sqlite3.connect('dab.db')
sql = db.cursor()

db.commit()

sql.execute("""CREATE TABLE IF NOT EXISTS users (
    name TEXT,
    surname TEXT
)""")


def log():

    user_name = input('Введите ваше имя: ')
    user_surname = input('Введите вашу фамилию: ')


    sql.execute(f"SELECT name FROM users WHERE name = '{user_name}' ")
    if sql.fetchone() is None:
        sql.execute(f"INSERT INTO users VALUES (?,?)", (user_name, user_surname))
        db.commit()

        print('Зарегистрировано')
    else:
        print('такая запись уже имеется')
    
            

def lag():
    sur = input('Введите фамилию: ')

    sql.execute(f"SELECT surname FROM users WHERE surname = '{user_surname}' ")
    if sur == user_surname:
        print(sur)
    else:
        print('такого логина не существует. зарегистрируйтесь')
        log()

lag()

Ответы (1 шт):

Автор решения: Kers

Краткий пример того что получается у Вас:

test = "test" # переменная в глобальной области видимости
def fun0():
    print(test) # ее можно использовать

fun0()

# Определяем переменную в теле функции
def fun1():
    user_name = "user" 
    print(user_name)

fun1();

# Будет работать так как user_name передается параметром в функцию
def fun2(user_name): 
    print(user_name) 

fun2("user")

# Ваш случай вызовет ошибку так как user_name не существует в контексте данной функции. 
def funError():
    print(user_name) 

funError();

Подробнее про область видимости

→ Ссылка