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

Jupyter运行正常但VS中出现AttributeError/NameError问题求助

问题:Python类代码在Jupyter正常运行但VS中报错

一、带涨薪方法的Employee类问题

代码

class Employee():
    def __init__ (self,first_name,last_name,pay):
        self.first_name = first_name
        self.last_name = last_name
        self.pay = pay
        self.email = first_name + "." + last_name + "@company.com"

    def fullname(self):
        return f"{self.first_name} {self.last_name}"

    def apply_raise(self):
        self.pay = int(self.pay*1.04)

employee_1.pay = 50000
print (employee_1.pay)
employee_1.apply_raise()
print (employee_1.pay)

Jupyter输出

50000
52000

VS报错

>>> employee_1.apply_raise()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Employee' object has no attribute 'apply_raise'
>>> print (employee_1.pay)
50000

二、直接定义员工属性的问题

代码

Employee_1.first_name = "John"
Employee_1.last_name = "Doe"
Employee_1.email = "john.doe@company.com"
Employee_1.pay = 50000

Employee_2.first_name = "Test"
Employee_2.last_name = "User"
Employee_2.email = "test.user@company.com"
Employee_2.pay = 60000

print(Employee_1.email)
print(Employee_2.email)

Jupyter输出

john.doe@company.com
test.user@company.com

VS报错

NameError: name 'Employee_1' is not defined
>>> print(Employee_2.email)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Employee_2' is not defined

解决方法

  • 第一个问题的核心原因:代码中未创建employee_1实例就直接调用属性和方法。Jupyter可能在之前单元格已创建过该实例,而VS从头执行脚本,无实例导致报错;同时若VS中未重新执行类定义代码,会使用旧版本类(缺少apply_raise方法)。
    修正代码:

    # 先创建Employee实例
    employee_1 = Employee("John", "Doe", 50000)
    employee_1.apply_raise()
    print(employee_1.pay)
    

    确保在VS中先执行类定义代码,再执行实例操作。

  • 第二个问题的核心原因:Employee_1和Employee_2是未定义变量,直接赋值属性自然报错。Jupyter可能之前已定义过这两个变量。
    修正代码:

    # 方式1:通过构造方法创建实例
    Employee_1 = Employee("John", "Doe", 50000)
    Employee_2 = Employee("Test", "User", 60000)
    
    # 方式2:若要手动赋值属性,需先修改__init__为带默认参数,再创建空实例
    class Employee():
        def __init__ (self,first_name="",last_name="",pay=0):
            self.first_name = first_name
            self.last_name = last_name
            self.pay = pay
            self.email = first_name + "." + last_name + "@company.com"
    
    Employee_1 = Employee()
    Employee_1.first_name = "John"
    Employee_1.last_name = "Doe"
    Employee_1.email = "john.doe@company.com"
    Employee_1.pay = 50000
    
  • VS运行注意事项:VS运行Python脚本是一次性执行整个文件,需确保代码逻辑完整——先定义类,再创建实例,最后执行操作。若用交互式窗口,需按顺序执行代码块,不可跳过类定义步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:29:51