修复分配前引用的错误变量,并简化

发布于 2025-02-04 22:24:23 字数 907 浏览 3 评论 0原文

我有一个Python项目,我尝试将其连接到SQL数据库,并具有根据返回的结果来设置数据框的功能。

他们的问题是,一旦我运行代码崩溃并显示以下错误:

名称:分配前引用的免费变量“颜色” 封闭范围

代码:

import pyodbc 
import pandas as pd
import numpy as np

import streamlit as st



@st.experimental_singleton
def connect_db():
   con = pyodbc.connect(
   driver="ODBC Driver 17 for SQL Server",
   Server = "192.168.21.132",
        
   DATABASE="tasks",
   UID="xxxx",
   PWD="xxxx",
   )
   cursor = con.cursor()
   return con


def highlight_rows(row):
    value = row.loc["status_type"]
    if value == "done":
        color = "#ffffff"
    elif value == "pending":
        color = "#474d51"
    return [f'background-color: {color}' for _ in row]


con = connect_db()
df = pd.read_sql_query('select * from tasks.dbo.info',con)
st.dataframe(df.reset_index(drop=True).style.apply(highlight_rows,axis = 1),height = 500)

   

i have a python project where i try to connect to SQL database and having function that style the dataframe based on the returned results.

Them problem is that once i run the code it crash and display the below error:

NameError: free variable 'color' referenced before assignment in
enclosing scope

code:

import pyodbc 
import pandas as pd
import numpy as np

import streamlit as st



@st.experimental_singleton
def connect_db():
   con = pyodbc.connect(
   driver="ODBC Driver 17 for SQL Server",
   Server = "192.168.21.132",
        
   DATABASE="tasks",
   UID="xxxx",
   PWD="xxxx",
   )
   cursor = con.cursor()
   return con


def highlight_rows(row):
    value = row.loc["status_type"]
    if value == "done":
        color = "#ffffff"
    elif value == "pending":
        color = "#474d51"
    return [f'background-color: {color}' for _ in row]


con = connect_db()
df = pd.read_sql_query('select * from tasks.dbo.info',con)
st.dataframe(df.reset_index(drop=True).style.apply(highlight_rows,axis = 1),height = 500)

   

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

別甾虛僞 2025-02-11 22:24:23

发生错误是因为您没有指定value的值可能是“ done”“ perdending”之外的任何其他条件。

可以通过在函数righlight_rows中使用else子句:

def highlight_rows(row):
    value = row.loc["status_type"]
    if value == "done":
        color = "#ffffff"
    elif value == "pending":
        color = "#474d51"
    else: # for any other value
        color = "000000"
    return [f'background-color: {color}' for _ in row]

The error occurs because you did not specify a condition where the value of value could be anything other than "done" or "pending".

It can be avoided by having an else clause inside your function highlight_rows :

def highlight_rows(row):
    value = row.loc["status_type"]
    if value == "done":
        color = "#ffffff"
    elif value == "pending":
        color = "#474d51"
    else: # for any other value
        color = "000000"
    return [f'background-color: {color}' for _ in row]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文