“if”声明基于命令?

时间:2018-02-08 22:01:41

标签: python python-3.x if-statement

我从Python的文档中了解到我可以使用以下格式检查条件:

if x < 0:
else:
    print('Else code')

我想运行一个命令并检查该命令是否成功,但是我收到“SyntaxError:invalid syntax”错误。救命啊!

我的格式大致是:

if myCommand(parameters):
    print("It worked")
else:
    print("It failed")
    if mySecondCommand(parameters):
        print("2nd command worked")
    else:
        print("2nd command failed")

这是我使用Netmiko库的实际代码:

from netmiko import ConnectHandler
if net_connect = ConnectHandler(device_type='cisco_ios', ip='11.22.33.44', username='domain.login', password='DomainPassword'):
    print("Domain login succeeded.")
else:
    print("Domain login failed.")
    if net_connect = ConnectHandler(device_type='cisco_ios', ip='11.22.33.44', username='StandardUsername', password='StandardPassword'):
        print("Standard login worked")
    else:
        print("Standard login failed")

我得到的输出是:

if net_connect = ConnectHandler(device_type='cisco_ios', ip='11.22.33.444', username='domain.login', password='DomainPassword'):
               ^
SyntaxError: invalid syntax

4 个答案:

答案 0 :(得分:2)

考虑到对此问题提供的评论,您基本上需要的是如何知道连接是否失败。由于连接失败会引发异常,因此if语句不足以满足您的需求。相反,你想这样做:

from netmiko import ConnectHandler
try:
    net_connect = ConnectHandler(device_type='cisco_ios', ip='11.22.33.44', username='domain.login', password='DomainPassword')
    print("Domain login succeeded.")
except:
    print("Domain login failed.")

    try:
        net_connect = ConnectHandler(device_type='cisco_ios', ip='11.22.33.44',username='StandardUsername', password='StandardPassword')
        print("Standard login worked")
    except:
        print("Standard login failed")

如果您在Python中没有遇到“try-except”语句,我建议您查找它们。

答案 1 :(得分:1)

您的原始代码段会引发语法错误,您无法运行此代码(感谢 KyrST):

if x < 0:
else:
    print('Else code')

你想要这个:

if not x < 0:
    print("Not X < 0 code")

导致错误的问题在于:

if net_connect = ConnectHandler(device_type='cisco_ios', ip='11.22.33.44', username='domain.login', password='DomainPassword'):

在Python中,你不能在一个条件中分配一个值,即使你做了,你会把它与它进行比较? 你应该做的不是上面的事情:

net_connect = ConnectHandler(device_type='cisco_ios', ip='11.22.33.44', username='domain.login', password='DomainPassword'):
if net_connect == some_check_here:

some_check_here有一些值可以用来比较出错的地方,我不确定netmiko如何处理错误,我的猜测是你必须捕获异常。

答案 2 :(得分:0)

您正试图在 if net_connect == ConnectHandler(device_type='cisco_ios', ip='11.22.33.44', username='domain.login', password='DomainPassword'): ... 语句中分配变量(Python中不允许),而不是检查是否相等。

尝试:

==

并注意使用=代替type Trows = record private Fcode: string; Qty: Double; cena: Currency; procedure Setcode(const value: string); public property code: string read Fcode write SetCode; end; Tcart = class(TObject) private Frow: array of Trows; function Getrow(Index: Integer): Trows; procedure Setrow(Index: Integer; const Value: Trows); public ID: integer; CustName: string; Suma: currency; Payed: boolean; constructor Create(const Num: Integer); destructor Destroy; function carttostr: string; procedure setcode(Index: integer;val: string); property Row[Index: Integer]: Trows read Getrow write setrow; end;

答案 3 :(得分:0)

不幸的是,Python不能在if语句中使用变量赋值 - 它不能用作表达式。

使用=运算符,您尝试分配 net_connect变量,而不是将其进行比较。

==运算符是用于比较的正确运算符,因此:

if net_connect == ConnectHandler(device_type='cisco_ios', ip='11.22.33.44', username='domain.login', password='DomainPassword'):是正确的,因为你要比较两者。

您的原始if net_connect = ConnectHandler(device_type='cisco_ios', ip='11.22.33.444', username='domain.login', password='DomainPassword'):,ConnectHandler到net_connect。