Python - 警告:意外错误:<class 'IndexError'>

Posted

技术标签:

【中文标题】Python - 警告:意外错误:<class \'IndexError\'>【英文标题】:Python - Warning: Unexpected Error: <class 'IndexError'>Python - 警告:意外错误:<class 'IndexError'> 【发布时间】:2018-02-13 12:50:05 【问题描述】:

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

这是我的代码:

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.')

【问题讨论】:

我认为这里的问题是这是horrible python code:[...] Never use catch-all except Protip:除非输出有用错误信息,否则不要捕获异常。如果您没有捕获异常并让它输出其完整的堆栈跟踪,这将提供更多信息。 问题很可能是其中一个split(..) 不会产生两个 元素,因此[1] 会引发IndexError。 另外:else 中的try 表示如果没有发生异常。因此,如果没有出现任何问题,您会抛出异常以防万一? 是的。异常信息隐藏在一个名为sys.exc_info 的奇怪结构中并且具有难以记住的复杂结构是有原因的:您不应该经常使用它。如果您不知道如何处理它,请不要抓住它。处理可以重新提升(只需在except 子句中执行raise)。 【参考方案1】:

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

【讨论】:

以上是关于Python - 警告:意外错误:<class 'IndexError'>的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 iOS13.2 中加载 WKWebView 时收到控制台警告:[Process] kill() 返回意外错误 1?

意外(IMO)恒定转换警告

git rebase abort 后的 git reset --hard 错误:警告:ref HEAD 的日志在 DD/MM/YYY TTTT 上意外结束

启动路由器时出现意外错误:错误:缺少必需的参数“catchAll”

尽管阅读了常见问题解答,ProGuard 仍因“警告:类 [*] 意外包含类 [*]”而失败

pycharm意外实参怎么修复