python运行错误,python运行错误 5

2021-01-03 13:06:15 字数 7659 阅读 1983

1楼:匿名用户

错误都已经提示出来了

table = db['table']

keyerror: 'table'

调试一下db,看看有没有table键:

db.get(‘table'’,‘not exits’)

2楼:☆你大爷

你好:前面的语句是:

你把文件里面的每一行,然后统计地址,并放到字典中;

并统计个数;

然后排个序;【这一步,估计有错误,最好是打印一下,自己调试下】打印出来;

后面的我看的不是很明白;【pop这个函数一般我不用的】

3楼:匿名用户

table = db['table']

你这个table数据库是否存在》

python运行错误的问题 50

4楼:程序员墨鱼

错误的截图也不完整,没有**,这种有点难分析吧,一般错误里面都会报出是哪一行的错误,你这个应该是数据上的问题,然后处理数据的时候用错了方法

python运行错误

5楼:腾讯电脑管家

public listpagelisttwo(int currentpage, int showrows)

connection con = null;

preparedstatement ps = null;

resultset rs = null;

arraylistresultlist = new arraylist();

try{

python运行错误

6楼:坑队友的爱晴天

anaconda里面的虚拟python环境和本机的python环境又不一样,不是同一个环境,python包肯定不一样

python运行错误怎么办?

7楼:简单灬爱

一、python的错误处理:

在程序运行的过程中,如果发生了错

误,可以事先约定返回一个错误**,这样,就可以知道是否有错以及出错的原因。

在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件的描述符(就是一个整数),出错时返回-1用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须大量的**来判断是否出错:def foo():

r = somefunction() if r == (-1): return (-1) return rdef bar():

r = foo() if r == (-1): print("error") else: pass一旦出错,还要一级一级上报,直到某个函数可以处理该错误(比如,给用户输出一个错误信息)

所以,高级语言通常都内置了一套try...except...finally...的错误处理机制,python也不例外。try

让我们用一个例子来看看try的机制try: print("try....")

r = 10 / 0 print("result", r)except zerodivisionerror as e: print("except:", e)finally:

print("finally...")print("end....")

当我们认为某些**可能会出错时,就可以用try来运行这段**,如果执行出错,则后续**不会继续执行

而是直接跳转至错误处理**,即except语句块

执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。

上面的**在计算10 / 0时 会产生一个除法运算错误:try....except: division by zerofinally...

end....>>>从输出可以看到,当错误发生时,后续语句print("result:", r)不会被执行,except由于捕获到zerodivisionerror因此被执行。

最后,finally语句被执行。然后,程序继续按照流程往下走。

如果把除数0 变成2,则执行结果如下try....

result 5.0finally...

end....>>>由于没有错误发生,所以except语句块不会被执行,但是finally如果有则一定会被执行,当然finally也可以没有

你还可以猜测,错误应该有很多种类,日过发生了不同类型的错误,应该由不同的except语句块处理。

没错,可以有多个except来捕获不同类型的错误:try: print("try.....")

r = 10 / int("a") print("result:", r)except valueerror as e: print("valueerror:

", e)except zerodivisionerror as e: print("zerodivisionerror:", e)finally:

print("finally...")print("end...")

int()函数可能会抛出valueerror,所以我们用一个except捕获valueerror,用另一个except捕获zerodivisionerror

此外,如果没有错误发生,可以再except语句块后面加一个else,当没有错误发生时,会自动执行else语句。try: print("try...")

r = 10 / int("2") print("result:", r)except valueerror as e: print("valueerror:

", e)except zerodivisionerror as e: print("zerodivisionerror:", e)else:

print("no error!")finally: print("finally...

")print("end")

python的错误其实也是class,所有的错误类型都继承自baseexception,

所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。

比如:try:

foo()except valueerror as e: print("valueerror")except unicodeerror as e: print("unicodeerror")

第二个except永远也捕获不到unicodeerror, 因为unicodeerror是valueerror的子类

如果有,也是被第一个except给捕获了。

python所有的错误都是baseexception类派生的。

所有常见的错误类型和继承关系看这里:

https://docs.python.

***/3/library/exceptions.html#exception-hierarchy使用try...exccept捕获错误还有一个巨大的好处,就是可以跨越多层调用,比如函数main()调用foo()

foo()调用bar(),结果bar()出错了,这时,只要main()捕获到了,就可以处理:def foo(s): return 10 / int(s)def bar(s):

return foo(s) * 2def main(): try:

bar("0") except exception as e: print("error:", e) finally:

print("finally...")

也就是说,不需要在每个可能出错的地方去捕获异常,只要在合适的层次去捕获就可以了。

这样一来,就大大减少了写 try...except...finally的麻烦。

二、调用堆栈

如果错误没有**获,他就会一直往上抛,最后被python解释器捕获,打印一个错误信息,然后程序退出。def foo(s): return 10 / int(s)def bar(s):

return foo(s) * 2def main():

bar("0")

main()

执行结果为:

traceback (most recent call last):

file "c:/python36/test.py", line 10, in

main()

file "c:/python36/test.py", line 8, in main

bar("0")

file "c:/python36/test.py", line 5, in bar return foo(s) * 2

file "c:/python36/test.py", line 2, in foo return 10 / int(s)

zerodivisionerror: division by zero

出错并不可怕,可怕的时不知道**出错了。解读错误信息时定位错误的关键。

我们从上往下可以看到整个错误的调用函数链。

错误第一行:

traceback (most recent call last):

这告诉我们的是错误的跟踪信息。

file "c:/python36/test.py", line 10, in < module >main()

说明调用main()出错了,在**文件test.py中第10行,但是原因是第8行:

file"c:/python36/test.py", line8, in main

bar("0")

调用bar("0")出错了,在**文件test.py中第8行,但原因是第5行:

file"c:/python36/test.py", line5, in barreturn foo(s) * 2调用return foo(s) * 2时出错了,在test.

py中第5行,但原因是第2行

file "c:/python36/test.py", line 2, in foo return 10 / int(s)

zerodivisionerror: division by zero

这时我们找到了源头,原来在第2行调用return 10 / int(s)出错了,错误为zerodivisionerror

三、记录错误

如果不捕获错误,自然可以让python解释器来打印出错误堆栈,但是程序也被结束了。

既然我们能捕获错误,就可以把错误堆栈打印出来,然后分析错误原因,同时,让程序继续执行下去。

python内置的logging模块可以非常容易地记录错误信息:import loggingdef foo(s): return 10 / int(s)def bar(s):

return foo(s) * 2def main(): try:

bar("0") except exception as e:

logging.exception(e)

main()print("end")

输出结果为:

error:root:division by zero

traceback (most recent call last):

file "c:/python36/test.py", line 12, in main

bar("0")

file "c:/python36/test.py", line 8, in bar return foo(s) * 2

file "c:/python36/test.py", line 5, in foo return 10 / int(s)

zerodivisionerror: division by zero

end同样是出错,但程序打印完错误信息后会继续执行,并正常退出。

通过配置,logging还可以把错误记录到日志文件里,方便事后排查。

四、抛出错误

因为错误是class,捕获一个错误就是捕获到该class的一个实例。

因此,错误并不是凭空产生的,而是有意创建并抛出的。

python的内置函数会抛出很多类型的错误,我们自己编写的函数也可以抛出错误。

如果要抛出错误,首先根据需要,可以定义一个错误的class,选择好继承关系,然后用raise语句抛出一个错误的实例:class fooerror(valueerror): passdef foo(s):

n = int(s) if n == 0: raise fooerror("invalid value: %s" % s) return 10 / n

foo("0")

输出结果:

traceback (most recent call last):

file "c:/python36/test.py", line 10, in

foo("0")

file "c:/python36/test.py", line 7, in foo raise fooerror("invalid value: %s" % s)

fooerror: invalid value: 0

只有在必要的时候才定义我们自己的错误类型。

如果可以选择python已有的内置错误类型(比如valueerror, typeerror),尽量使用python内置的错误类型。

最后,我们来看另一种错误处理方式:def foo(s):

n = int(s) if n == 0: raise valueerror("invalid value: %s" % s) return 10 / ndef bar():

try:

foo("0") except valueerror as e: print("valieerror") raisebar()

在bar()函数中,我们明明已经捕获了错误,但是,打印一个valueerror之后

又通过raise语句抛出去了。这不是有病吗

其实,这种错误处理方式不但没病,而且相当常见。

捕获错误目的只是记录一下,便于或许追踪。

但是,由于当前函数不知道应该怎么处理该错误,所以,最恰当的方式是继续往上抛,让顶层调用者去处理。

好比一个员工处理不了一个问题时,就把问题一直往上抛,最终会抛给ceo去解决。

注意:raise语句如果不带参数,就会把当前错误原样抛出。

此外,在except中raise一个error,还可以改写错误类型try: 10 / 0except zerodivisionerror: raise valueerror("do not input zero!

")输出结果:

traceback (most recent call last):

file "c:/python36/test.py", line 4, in raise valueerror("do not input zero!")

valueerror: do not input zero!>>>只要是合理的转换逻辑就可以,但是,绝不应该把一个ioerror转成毫不相干的valueerror.

总结:python内置的 try...except...finally 用来处理错误十分方便。

出错时,会分析错误信息并定位错误发生的**位置才是关键的。

程序也可以主动抛出错误,让调用者来处理相应的错误。

但是应该在文档中写清楚可能会抛出哪些错误,以及错误产生的原因。

python语法错误,python语法错误 10

1楼 丿丨晴灬天 问题1 什么是正确的缩进 缩进是干嘛用的 因为python中的语句块 如判断 循环等中的语句块 是通过不同的缩进来区分的 不像c或java中的有诸如 这样的花括号去确定 块举例 if user root if user root 这里是python中的 语句块一定要缩进 否则就会提...

python运行出错程序与错误在问题补充里求高手

1楼 匿名用户 typeerror float argument required not str 这里就是出错的原因啊? 需要float格式参数,而不是字符串 2楼 匿名用户 print float qdat 5 4f v 3楼 匿名用户 这个问题不是问过了么? python运行错误 5 4楼 匿...

在python下按F5运行出现错误,是怎么回事

1楼 匿名用户 你的 应该保存成一个 py文件,然后用python自带的编辑器打开并f5运行。 2楼 匿名用户 能新建个 py文件,然后把 黏贴进去再运行好吗? python这个程序按f5无法运行是为什么啊 3楼 夔斐蒉忆灵 跟系统没关系,我用vs都用了10多年了,没有这个问题。肯定是你的程序没写好...