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

无法从其他Python文件调用变量?排查a.py与b.py的报错问题

Python模块导入报错:问题分析与修复方案

首先,咱们先把你的两个文件代码贴出来,方便定位问题:

a.py

#!/usr/bin/env python
# coding=utf-8
CHOOSE = input (''' \033[1;35m choose 1 or 2:\033[0m
1)tom
2)jack ''')
a = 666
b = "bbb"
def f():
    print("this is a test")
    return "function"
if __name__ == '__main__':
    if CHOOSE == '1':
        username = 'tom'
        print(username)
    elif CHOOSE == '2':
        username = 'jack'
        print(username)
    else:
        print('wrong choice,scipt is exit...')

b.py

#!/usr/bin/env python
# coding=utf-8
import a
from a import b,f,CHOOSE,username
a = a.a
f()
print(b,a,CHOOSE,username)

问题出在哪?

当你运行python b.py时,核心报错原因有两个:

  • username变量未定义(模块导入时不会执行if __name__ == '__main__'代码块)
    在Python里,当一个.py文件被作为模块导入时,文件中if __name__ == '__main__':包裹的代码是不会执行的。你的username变量正是定义在这个代码块里,所以当b.py尝试from a import username时,Python找不到这个变量,直接抛出ImportError。

  • 命名冲突(非直接报错,但需注意)
    你在b.py里写了a = a.a,这会把原本指向模块a的变量a覆盖成模块里的a值(666),后续如果想再调用模块a的其他属性就会出问题,建议换个变量名,比如a_val = a.a。

怎么修复?

根据你的需求,有两种常见的修复方式:

方式一:让模块也能获取username(如果b.py确实需要这个变量)

把username的定义逻辑移到if __name__ == '__main__':外面,或者封装成函数。比如修改a.py:

#!/usr/bin/env python
# coding=utf-8
def get_username():
    CHOOSE = input (''' \033[1;35m choose 1 or 2:\033[0m
1)tom
2)jack ''')
    if CHOOSE == '1':
        return 'tom'
    elif CHOOSE == '2':
        return 'jack'
    else:
        print('wrong choice,scipt is exit...')
        exit()

a = 666
b = "bbb"
def f():
    print("this is a test")
    return "function"

if __name__ == '__main__':
    username = get_username()
    print(username)

然后修改b.py,调用函数获取username:

#!/usr/bin/env python
# coding=utf-8
import a
from a import b,f,get_username

a_val = a.a
username = get_username()
f()
print(b,a_val,username)

方式二:b.py不需要username,只导入需要的变量

如果你的b.py其实用不到username,那直接去掉对它的导入即可:

#!/usr/bin/env python
# coding=utf-8
import a
from a import b,f,CHOOSE

a_val = a.a
f()
print(b,a_val,CHOOSE)

这样运行python b.py就不会报错啦~

内容的提问来源于stack exchange,提问作者ChrisChan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:05:57