Как исправить ошибку «TypeError: объект 'str' не вызывается»? - PullRequest
0 голосов
/ 04 августа 2020

Среда:

Python 3,7

Windows 10 64 бита

IDE Pycharm 2019

Проблема:

Приведенный ниже фрагмент кода работал без проблем. Мне пришлось переместить папку моего проекта Pycharm, и теперь я получаю это сообщение об ошибке: «TypeError: объект 'str' не вызывается».

Код:

import os    
import psutil    

mypid = os.getpid()
print(f"PID of Program: {mypid}")
PROCNAME = "Program.exe"
for proc in psutil.process_iter():
    print(f"proc : {proc} - Type: {type(proc)}")
    print(f"proc.name : {proc.name} - Type: {type(proc.name)}")
    print(f"PROCNAME : {PROCNAME} - Type: {type(PROCNAME)}")
    print(f"proc.pid : {proc.pid} - Type: {type(proc.pid)}")
    print(f"mypid : {mypid} - Type: {type(mypid)}")
    if proc.name() == PROCNAME and proc.pid != mypid:  # < ====== Line 15 where is the error
        print(f"Program will kill this process : {proc}")
        proc.kill()

Вывод ошибки:

PID of Program: 4176
proc : psutil.Process(pid=0, name='System Idle Process') - Type: <class 'psutil.Process'>
proc.name : System Idle Process - Type: <class 'str'>
PROCNAME : Program.exe - Type: <class 'str'>
proc.pid : 0 - Type: <class 'int'>
mypid : 4176 - Type: <class 'int'>
Traceback (most recent call last):
  File "E:/CFF Dropbox/Gauthier Buttez/cff/Python/PhoneBot_0002/test1.py", line 15, in <module>
    if proc.name() == PROCNAME and proc.pid != mypid:
TypeError: 'str' object is not callable

То, что я пробовал:

Я изолировал этот фрагмент кода пустым python документ. Я хотел убедиться, что проблема не связана с другим фрагментом кода, который находится где-то еще. Когда я выполняю этот изолированный фрагмент кода, у меня возникает та же проблема. вопроса, и это не помогло мне понять проблему.

Что я делаю неправильно. Как видите, я печатаю значение и тип каждой переменной и сравниваю строку со строкой и int с int. В чем проблема? Я не понимаю Не могли бы вы мне помочь?

1 Ответ

2 голосов
/ 04 августа 2020
proc.name()

proc.name - это строка, а не метод. Для доступа к нему используйте proc.name, без скобок.

Как правило, всякий раз, когда вы сталкиваетесь с ошибкой *** object is not callable, вам следует искать набор неуместных (...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...