Build a Salary Tracker - Step 31

Tell us what’s happening:

Test does not register my therd if statement in Build a Salary Tracker step 31

Your code so far

class Employee:
    _base_salaries = {
        'trainee': 1000,
        'junior': 2000,
        'mid-level': 3000,
        'senior': 4000,
    }

    def __init__(self, name, level):
        self.name = name
        self.level = level
        self._salary = Employee._base_salaries[level]

    def __str__(self):
        return f'{self.name}: {self.level}'

    def __repr__(self):
        return f"Employee('{self.name}', '{self.level}')"

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, new_name):
        if not isinstance(new_name, str):
            raise TypeError("'name' must be a string.")
        self._name = new_name
        print(f"'name' updated to '{self.name}'.")

    @property
    def level(self):
        return self._level

    @level.setter
    def level(self, new_level):

# User Editable Region

        if not isinstance(new_level, str):
            raise TypeError("'level' must be a string.")
        if new_level not in Employee._base_salaries:
            raise ValueError(f"Invalid value '{new_level}' for 'level' attribute.")    
        if hasattr(self, '_level') and new_level == self._level:
            raise ValueError(f"'{new_level}' is already the selected level.") 

# User Editable Region

        self._level = new_level
        
    

    @property
    def salary(self):
        return self._salary

charlie_brown = Employee('Charlie Brown', 'trainee')

charlie_brown.level = 'trainee'

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36

Challenge Information:

Build a Salary Tracker - Step 31

Github Link: freeCodeCamp/curriculum/challenges/english/blocks/workshop-salary-tracker/68c9cab4b1118da59eecfc56.md at main · freeCodeCamp/freeCodeCamp · GitHub

you have created this, right? so please use it

Here => new_level == self.level?

have you tried making the change?

Yes, in all possible combinations.

@level.setter 
    def level(self, new_level):
        if not isinstance(new_level, str):
            raise TypeError("'level' must be a string.")
        if new_level not in Employee._base_salaries:
            raise ValueError(f"Invalid value '{new_level}' for 'level' attribute.")    
        if hasattr(self, '_level') and new_level == self.level:
            raise ValueError(f"'{new_level}' is already the selected level.") 
        self._level = new_level

Terminal => ‘name’ updated to ‘Charlie Brown’.
Traceback (most recent call last):
File “main.py”, line 53, in
File “main.py”, line 42, in level
ValueError: ‘trainee’ is already the selected level.

Console => // running tests
1. You should have a third if statement inside your level setter.
2. When new_level is equal to self.level, you should raise a ValueError with the message ‘{level}’ is already the selected level., where {level} should be replaced by the current level.
3. Your if statement should use hasattr(self, ‘_level’) to check if _level exists before comparing.
// tests completed
// console output
‘name’ updated to ‘Charlie Brown’.

Hint => You should have a third if statement inside your level setter.

I did a reset of the task and it fixed the problem. Thank You.

this line was generating the error, and it stopped the tests from checking your code