Python Forum
'str' object is not callable
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
'str' object is not callable
#1
this is my script below :
when i first run, everything is normal and prompt user "Do you want a new reading :"
but when i key in yes and the error 'str' object is not callable came out on this line "hex_number = str(hex(randomnumber))"
any idea how to solve this issue? i've check and confirm i dont have another str define else where ..

def main():    

    import random
    global hex
    

    randomnumber = random.randint(0,99)

    hex_number = str(hex(randomnumber))
    hex_numberd0 = '0x' + hex_number[2:]
    print('A random D0:', hex_number)

    randomnumber = random.randint(0,99)
    hex_number = str(hex(randomnumber))
    hex_numberd1 = '0x' + hex_number[2:]
    print('A random D1:', hex_number)

    randomnumber = random.randint(0,99)
    hex_number = str(hex(randomnumber))
    hex_numberd2 = '0x' + hex_number[2:]
    print('A random D2:', hex_number)

    D0 = hex_numberd0
    D1 = hex_numberd1
    D2 = hex_numberd2

    #hex coversion
    hex= D0
    dec0 = int(hex,16)
    print('Value in hexadecimal D0 :', hex)
    print('Value in decimal D0 :', dec0)

    hex= D1
    dec1 = int(hex,16)
    print('Value in hexadecimal D1 :', hex)
    print('Value in decimal D1 :', dec0)

    hex= D2
    dec2 = int(hex,16)
    print('Value in hexadecimal D2 :', hex)
    print('Value in decimal D2 :', dec0)

    #coversion ends
    
    #inclination calculation

    if(dec2 >> 7 == 1):
           signbit = -1
    else:
            signbit = 1

    Data0 = (dec0 >> 6)
    Data1 = (dec1 <<2)
    Data2 = ((dec2&127)<<10)

    print("D0 =", Data0)
    print("D1 =", Data1)
    print("D2 =", Data2)

    DataI = signbit*(Data0 + Data1 + Data2)/1000
    print("inclination = ", DataI)

    restart = input("Do you want a new reading :   ").lower()
    if restart == "yes":
        main()

    else:
        exit()
main()
Yoriz write Jul-28-2021, 09:39 AM:
Please post all code, output and errors (in their entirety) between their respective tags. Refer to BBCode help topic on how to post. Use the "Preview Post" button to make sure the code is presented as you expect before hitting the "Post Reply/Thread" button.
Reply
#2
The built-in function hex is being overwritten.
Reply
#3
(Jul-28-2021, 09:46 AM)Yoriz Wrote: The built-in function hex is being overwritten.


Hi,

any suggestions to work around?
Reply
#4
Don't name your variable hex.

Also:

Do you really need a global? Those should be avoided most of the time. You don't seen to be using it at global scope anyway.

import statements should go at the top of the file, not inside functions or otherwise in the middle of other code. Rationale: it interrupts reading of that code.
Reply
#5
(Aug-03-2021, 04:41 AM)ndc85430 Wrote: Don't name your variable hex.

Also:

Do you really need a global? Those should be avoided most of the time. You don't seen to be using it at global scope anyway.

import statements should go at the top of the file, not inside functions or otherwise in the middle of other code. Rationale: it interrupts reading of that code.

Hi!

if i did not declare a global in it, this error will appear "local variable 'hex' referenced before assignment"
i've shifted the statements on top too, thanks for the advice on this !
Reply
#6
Please remember to post errors in their entirety, because they give important information about the problem (i.e. line number and a pointer to the problem), along with the code that causes them. It's important for us to see what you're doing, rather than trying to recreate the problematic code ourselves.
Reply
#7
(Aug-03-2021, 05:58 AM)ndc85430 Wrote: Please remember to post errors in their entirety, because they give important information about the problem (i.e. line number and a pointer to the problem), along with the code that causes them. It's important for us to see what you're doing, rather than trying to recreate the problematic code ourselves.


 import random
def main():   
    randomnumber = random.randint(0,99)
 
    hex_number = str(hex(randomnumber)) ** [color=#C0392B]"local variable 'hex' referenced before assignment"** error appear here[/color]
    hex_numberd0 = '0x' + hex_number[2:]
    print('A random D0:', hex_number)
 
    randomnumber = random.randint(0,99)
    hex_number = str(hex(randomnumber))
    hex_numberd1 = '0x' + hex_number[2:]
    print('A random D1:', hex_number)
 
    randomnumber = random.randint(0,99)
    hex_number = str(hex(randomnumber))
    hex_numberd2 = '0x' + hex_number[2:]
    print('A random D2:', hex_number)
 
    D0 = hex_numberd0
    D1 = hex_numberd1
    D2 = hex_numberd2
 
    #hex coversion
    hex= D0
    dec0 = int(hex,16)
    print('Value in hexadecimal D0 :', hex)
    print('Value in decimal D0 :', dec0)
 
    hex= D1
    dec1 = int(hex,16)
    print('Value in hexadecimal D1 :', hex)
    print('Value in decimal D1 :', dec0)
 
    hex= D2
    dec2 = int(hex,16)
    print('Value in hexadecimal D2 :', hex)
    print('Value in decimal D2 :', dec0)
 
    #coversion ends
     
    #inclination calculation
 
    if(dec2 >> 7 == 1):
           signbit = -1
    else:
            signbit = 1
 
    Data0 = (dec0 >> 6)
    Data1 = (dec1 <<2)
    Data2 = ((dec2&127)<<10)
 
    print("D0 =", Data0)
    print("D1 =", Data1)
    print("D2 =", Data2)
 
    DataI = signbit*(Data0 + Data1 + Data2)/1000
    print("inclination = ", DataI)
 
    restart = input("Do you want a new reading :   ").lower()
    if restart == "yes":
        main()
 
    else:
        exit()
main()[python]
[/python]
Reply
#8
This is because again, you're using hex as a variable name later on and overwriting the built in function. So, don't do that.

Also, I should have mentioned, but post code within "[python]" tags to preserve indentation and formatting. You can press the Python logo button to put a pair of tags in your post.
Reply
#9
The hex function returns a string. You don't need to do this: str(hex(randomnumber))

If you want to do something multiple times, use a loop. If you want to store multiple values use a list.
import random

hex_numbers = [f'0x{hex(random.randint(0, 99))[2:]}' for _ in range(3)]
numbers = [int(hex_number, 16) for hex_number in hex_numbers]
for hex_number, number in zip(hex_numbers, numbers):
    print(hex_number, '=', number)
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  error in class: TypeError: 'str' object is not callable akbarza 2 444 Dec-30-2023, 04:35 PM
Last Post: deanhystad
  TypeError: 'NoneType' object is not callable akbarza 4 917 Aug-24-2023, 05:14 PM
Last Post: snippsat
  [NEW CODER] TypeError: Object is not callable iwantyoursec 5 1,260 Aug-23-2023, 06:21 PM
Last Post: deanhystad
  Need help with 'str' object is not callable error. Fare 4 776 Jul-23-2023, 02:25 PM
Last Post: Fare
  TypeError: 'float' object is not callable #1 isdito2001 1 1,044 Jan-21-2023, 12:43 AM
Last Post: Yoriz
  'SSHClient' object is not callable 3lnyn0 1 1,125 Dec-15-2022, 03:40 AM
Last Post: deanhystad
  TypeError: 'float' object is not callable TimofeyKolpakov 3 1,371 Dec-04-2022, 04:58 PM
Last Post: TimofeyKolpakov
  API Post issue "TypeError: 'str' object is not callable" makeeley 2 1,833 Oct-30-2022, 12:53 PM
Last Post: makeeley
  Merge htm files with shutil library (TypeError: 'module' object is not callable) Melcu54 5 1,493 Aug-28-2022, 07:11 AM
Last Post: Melcu54
  [split] TypeError: 'int' object is not callable flash77 4 2,676 Mar-21-2022, 09:44 PM
Last Post: deanhystad

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020