You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python跨文件导入全局变量遇异常:获取失败或误执行模块代码

问题解决:Python跨文件导入全局变量的两个问题

问题1:导入后访问全局变量报错 AttributeError

你遇到的报错是因为repository_id这个全局变量只有在调用create_repository函数后才会被赋值,如果没调用函数,模块create_repo里根本不存在这个属性,自然会触发报错。

问题2:移出__name__ == "__main__"导致重复创建仓库

Python导入模块时会执行模块内所有顶级代码(不在函数或if __name__块里的代码),所以把函数调用移出该判断后,只要导入模块就会执行创建仓库的逻辑,导致重复创建。


解决方案

方案1:用函数返回值替代全局变量(推荐)

全局变量容易引发代码耦合和不可预测的问题,更规范的做法是让函数直接返回repository_id,按需调用获取:

修改create_repo.py:

import json
import requests
from requests.auth import HTTPBasicAuth
import sys

# 请确保这些全局变量已正确定义
personal_access_token = "你的令牌"
base_url = "API接口地址"

def create_repository(repository_name):
    headers = {
        'Authorization': 'Basic ' + personal_access_token,  # 注意Basic后加空格,否则认证会失败
        'Content-Type': 'application/json',
        'User-Agent': 'Chrome'
    }

    payload = json.dumps({
        "project": "xxxxx",
        "name": repository_name
    })

    response = requests.request(
        "POST", 
        base_url, 
        headers=headers, 
        data=payload, 
        auth=HTTPBasicAuth("yyyy", personal_access_token)
    )
    print(response.text)
    repository_id = response.text[6:44]
    print("ID of the new repository:", repository_id)
    return repository_id  # 返回仓库ID

if __name__ == "__main__":
    # 只有直接运行该脚本时才会执行创建逻辑
    create_repository(sys.argv[1])

在其他文件中使用:

import create_repo

# 按需调用函数创建仓库并获取ID(不会重复创建,除非你主动调用)
repo_id = create_repo.create_repository("你的仓库名")
print(repo_id)

方案2:初始化全局变量(兼容原有逻辑)

如果必须保留全局变量的方式,在create_repo.py开头初始化repository_id为None,这样即使没调用函数,导入后访问也不会报错:

修改create_repo.py:

import json
import requests
from requests.auth import HTTPBasicAuth
import sys

personal_access_token = "你的令牌"
base_url = "API接口地址"
repository_id = None  # 提前初始化全局变量

def create_repository(repository_name):
    global repository_id  # 声明使用全局变量
    headers = {
        'Authorization': 'Basic ' + personal_access_token,
        'Content-Type': 'application/json',
        'User-Agent': 'Chrome'
    }

    payload = json.dumps({
        "project": "xxxxx",
        "name": repository_name
    })

    response = requests.request(
        "POST", 
        base_url, 
        headers=headers, 
        data=payload, 
        auth=HTTPBasicAuth("yyyy", personal_access_token)
    )
    print(response.text)
    repository_id = response.text[6:44]
    print("ID of the new repository:", repository_id)

if __name__ == "__main__":
    create_repository(sys.argv[1])

在其他文件中使用:

import create_repo

# 先调用函数创建仓库,才能获取到有效的ID
create_repo.create_repository("你的仓库名")
print(create_repo.repository_id)

内容的提问来源于stack exchange,提问作者Klára Janstová

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:16:04