Python-警告:意外错误:<;类别';索引器'&燃气轮机;

Python-警告:意外错误:<;类别';索引器'&燃气轮机;,python,error-handling,amazon-redshift,Python,Error Handling,Amazon Redshift,我正在尝试使用一些代码从名为“.logon”的文件中读取用户名和密码,并建立到redshift的连接。但是我收到了错误消息“Python-Warning:Unexpected error:” 这是我的密码: def redshift_connect(): try: l_user = getpass.getuser() home = expanduser("~") f = open(home + '/.logon')

我正在尝试使用一些代码从名为“.logon”的文件中读取用户名和密码,并建立到redshift的连接。但是我收到了错误消息“Python-Warning:Unexpected error:”

这是我的密码:

def redshift_connect():  
    try:  
        l_user = getpass.getuser()  
        home = expanduser("~")  
        f = open(home + '/.logon')  
        logline = f.readline()  
        usr = logline.split(',')[0].split('/')[1].strip()  
        pwd = logline.split(',')[1].rstrip()  


        conn=psycopg2.connect(host='host-name',  
        port= 5439, user= usr, password= pwd)  
        return conn  
    except IOError as e:  
        print ('I/O error ({0}): {1}: .tdlogon missing!!'.format(e.errno, e.strerror))
    except:  
        print ('Warning: Unexpected Error:',sys.exc_info()[0])  
    else:
        raise ConnectionError('Cannot establish connectionw with Redshift.')

我猜表达式
logline.split(',')
工作并返回一个只有一个条目的数组。表达式
logline.split(',')[1]
然后会引发一个
索引器,您可以在非特定的
except
子句中捕获它。

我认为这里的问题是:
[…]永远不要使用catch all except
Protip:除非输出有用的错误消息,否则不要捕获异常。如果您没有捕获异常并让它输出其完整堆栈跟踪,那么这将提供更多的信息。问题很可能是其中一个
拆分(…)
不会产生两个元素,因此
[1]
会引发索引器。另外,
try
中的
else
表示没有发生异常。如果没有什么问题,你会提出一个例外以防万一?是的。异常信息隐藏在一个名为
sys.exc_info
的奇怪结构中,并且具有一个很难记住的复杂结构,这是有原因的:您不应该经常使用它。如果你不知道如何处理,就不要抓住它。处理可以重新启动(只需在
子句中执行
提升
)。