【发布时间】:2013-04-26 19:49:27
【问题描述】:
我的代码使用 telnet 并且需要登录。如果登录不正确,则向控制台返回“登录不正确”。我想捕捉这个异常并跳过它,这样它就不会停止程序。我试过的如下:
try:
session.write("username".encode('ascii') + b"\r")
session.write("password".encode('ascii') + b"\r")
***this is the point where the console will return "Incorrect login"***
except sys.stdout == "Incorrect login":
print(sys.stdout)
pass
else:
**Rest of the code**
似乎它永远不会捕获此输出,继续执行我的代码并最终导致索引错误(因为我没有登录所需的数据)。我尝试搜索但没有运气。任何帮助,将不胜感激。我正在运行 python 3.3,并且仍在学习。谢谢!
编辑:这是 telnet 显示的内容
login: badusername
password: **blank b/c it is a pw field**
Login incorrect
login:
Edit2:直到 else 的所有代码(为保密而编辑)
import telnetlib, time
import sys, string, socket
import cx_Oracle
sql = "select column from table"
con = cx_Oracle.connect("login info blah...")
cur = con.cursor()
cur.execute(sql)
row = cur.fetchone()
rows = cur.fetchall()
def Tup():
return (rows)
cur.close()
con.close()
i = 0
while i < len(rows):
host = Tup()[i][0]
timeout = 120
print(host + ' =', end = ' ')
try:
session = telnetlib.Telnet(host, 23, timeout)
except:
out = open("Data.txt",'a')
out.write(host + " = FAILED\n")
print("FAILED")
else:
try:
session.write("username".encode('ascii') + b"\r")
session.write("pass".encode('ascii') + b"\r")
except sys.stdout == "Incorrect login":
print(sys.stdout)
pass
else:
【问题讨论】:
-
try 块中引发的异常是什么?
except正在寻找 0+ Exception 对象,而不是比较 -
我想我可能有错误的方法。也不例外,它只是返回“不正确的登录”,我想跳过该案例的其余部分..
-
在这种情况下使用
if ... == 'Incorrect login':和else -
这是我最初的想法,但我不知道要分配给...我不知道如何从控制台中提取该字符串,因为它是从我连接的机器返回的。
-
你能把所有相关的代码从头到尾粘贴到
else吗?所以我们可以尝试一下并了解模块等。
标签: python python-3.x try-catch stdout sys