Почему формат (str (var)) дает мне ошибку атрибута для моей os.system - PullRequest
1 голос
/ 08 февраля 2020

Я пытаюсь создать сценарий Python, который соединяет меня с «номером» VPN-сервера (с этим номером в качестве переменной)

Я написал:

import os
VPNServer = 0
VPNServer += 1
os.system("networksetup -connectpppoeservice 'VPNServer {servernumber}'").format(servernumber = str(VPNServer))
print("→ Successfully connected to", "VPNServer", VPNServer)

Но каждый раз, когда я пытаюсь запустить его, консоль выдает AttributeError

AttributeError: 'int' object has no attribute 'format'

Я не понимаю этого, потому что я взял строковую версию переменной

Если бы кто-то мог помочь, это было бы очень круто

Я на MacOS и использую Python 3.8.1

1 Ответ

3 голосов
/ 08 февраля 2020

В предоставленном вами фрагменте вы пишете

os.system('<some string>').format(args)

Вы делаете вызов format для возвращаемого значения os.system, которое является целым числом. Это идентично записи, например,

5.format(args)

Поскольку int объекты не имеют атрибута format, вы получите AttributeError, который вы описали.

То, что вы хотите написать -

os.system('<some string>'.format(args))

В этом конкретном случае c ваш фрагмент должен напоминать

os.system(
    "networksetup -connectpppoeservice 'VPNServer {servernumber}'"
       .format(servernumber=VPNServer)
)

Обратите внимание, что вызов str(VPNServer) является излишним, поскольку format автоматически вызовет метод __str__ предоставленного объекта.

...