Eliza Meww
Eliza Meww

Reputation: 19

SyntaxError: invalid token python 3

I have a problem with my Python script. When I run this Python script:

class Student:
    def __init__(self,student_name,student_id,student_phone):
        self.student_name = student_name
        self.student_id = student_id
        self.student_phone = student_phone

obj = Student("ELizaa",1253251,16165544)

print("student name",obj.student_name,"\nstudent id",obj.student_id,"\nStudent phone",obj.student_phone)

It is working fine. I got the expected output. But when student_phone starting with a 0 (like 0124575), I get an error:

obj = Student("ELizaa",1253251,016165544)
                                         ^
SyntaxError: invalid token

Why is this happening?

Upvotes: 1

Views: 7432

Answers (3)

cloudyyyyy
cloudyyyyy

Reputation: 491

In python3, you couldn't use 016165544 to create an integer variable. It's an octonary number in some other programming language, such as C. In Python, you should use 0o16165544 or 0O16165544.

However, what you want to create is a student ID and phone number, so I suggest that you use string instead.

Like this:

obj = Student("ELizaa", "1253251", "016165544")

Upvotes: 1

hygull
hygull

Reputation: 8740

In Python, adding 0 in front of any number needs an extra

  • x (for hexadecimal) followed by any number in hex digits range 0-9 or a-f or A-F.

  • o (for octal) followed by number(s) in octal digits range 0-7.

Have a look at below:

>>> 0o7
7
>>> 0o71
57
>>> 0o713
459
>>>
>>> 0xa
10
>>> 0xA
10
>>> 0x67
103
>>> 

» If you exceed the range or if you don't use x | o after 0.

>>> 0o8
  File "<stdin>", line 1
    0o8
     ^
SyntaxError: invalid token
>>> 
>>> 08
  File "<stdin>", line 1
    08
     ^
SyntaxError: invalid token
>>> 

Suggestion: If you are still willing to use 0 & want to perform operations on phones (for testing) then you can use the below approach to update the numbers.

Here we will store phone number as string & whenever we will update that, we will remove 0 from front, convert the remaining part into an integer, add (any operation) ant convert back to its original (0 in front) form & I think it is good.

>>> student_phone = "016165544"
>>> 
>>> # Add 3 to this
... 
>>> student_phone = "0" + str(int(student_phone.lstrip("0")) + 3)
>>> 
>>> student_phone
'016165547'
>>>  

Finally, you can call in this way (as you are already doing in your problem except 2nd one).

>>> class Student:
...     def __init__(self, student_name, student_id, student_phone):
...         self.student_name = student_name
...         self.student_id = student_id
...         self.student_phone = student_phone
... 
>>> obj = Student("ELizaa",1253251,16165544)
>>> print("student name",obj.student_name,"\nstudent id",obj.student_id,"\nStudent phone",obj.student_phone)
student name ELizaa 
student id 1253251 
Student phone 16165544
>>> 
>>> obj = Student("ELizaa",1253251,"016165544")                                
>>> print("student name",obj.student_name,"\nstudent id",obj.student_id,"\nStudent phone",obj.student_phone)
student name ELizaa 
student id 1253251 
Student phone 016165544
>>> 

Upvotes: 1

Paymahn Moghadasian
Paymahn Moghadasian

Reputation: 10349

Starting a number with the digit 0 makes it an octal number, but the behavior has some nuance. See this solution: Invalid Token when using Octal numbers

Upvotes: 0

Related Questions