pythonerror

1.python运行错误怎么办?

1. 一、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类派生的。

所有常见的错误类型和继承关系看这里:#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.python中错误,但不知道错在哪

1,注意符号,asc码的大于小于等于符号和GBK的大于小于等于符号不一样

2,看不懂的尽量自己加上注释,跳过不懂的,再通篇对照注释理解

我给修改了一下,加上注释,试着理解吧。

--------------

#-*-coding:utf-8

import random

secret = random.randint(1, 100)

print secret

tries = 0

print "AHOY! I'm the Dread Pirate Roberts, and I have a secret!"

print "It is a number from 1 to 99. I'll give you 6 tries."

while 1:

guessStr = raw_input("what's yer guess? \n")

try:

guess=int(guessStr)

except:#不是数字就返回

print "please give a number!"

continue

tries+=1 #输入即用掉一次机会

if guess < secret:

print "Too low, ye scurvy dog!"

elif guess > secret:

print "Too high, landlubber!"

else:#第一次小于,第二次大于,最后判断等于,如果输入对的就直接跳出

print "Avast! Ye got it! Found my secret, ye did!"

break

if tries<6:#小于6次有得输入,第6次还出错就跳出

continue

else:

print "NO more guesses! Better luck next time matey1"

print "The secret number was %s"%secret

break

3.我执行一段python脚本报错了,怎么解决

这个要看具体的错误,一般来说python脚本错误,如果是命令行的,一般是捕获ctrl-c事件吧。

import signal

import sys

def signal_handler(signal, frame):

print('You pressed Ctrl+C!')

sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

print('Press Ctrl+C')

signal.pause()

4.python出错,请问是什么问题

要把代码发现来才知道,以下是常见的错误下面终于要讲到当你用到更多的Python的功能(数据类型,函数,模块,类等等)时可能碰到的问题了。

由于篇幅有限,这里尽量精简,尤其是对一些高级的概念。要想了解更多的细节,敬请阅读Learning Python, 2nd Edition的“小贴士”以及“Gotchas”章节。

打开文件的调用不使用模块搜索路径当你在Python中调用open()来访问一个外部的文件时,Python不会使用模块搜索路径来定位这个目标文件。它会使用你提供的绝对路径,或者假定这个文件是在当前工作目录中。

模块搜索路径仅仅为模块加载服务的。不同的类型对应的方法也不同列表的方法是不能用在字符串上的,反之亦然。

通常情况下,方法的调用是和数据类型有关的,但是内部函数通常在很多类型上都可以使用。举个例子来说,列表的reverse方法仅仅对列表有用,但是len函数对任何具有长度的对象都适用不能直接改变不可变数据类型记住你没法直接的改变一个不可变的对象(例如,元组,字符串):T = (1, 2, 3)T[2] = 4 # 错误用切片,联接等构建一个新的对象,并根据需求将原来变量的值赋给它。

因为Python会自动回收没有用的内存,因此这没有看起来那么浪费:T = T[:2] + (4,) # 没问题了: T 变成了 (1, 2, 4)使用简单的for循环而不是while或者range当你要从左到右遍历一个有序的对象的所有元素时,用简单的for循环(例如,for x in seq:)相比于基于while-或者range-的计数循环而言会更容易写,通常运行起来也更快。除非你一定需要,尽量避免在一个for循环里使用range:让Python来替你解决标号的问题。

在下面的例子中三个循环结构都没有问题,但是第一个通常来说更好;在Python里,简单至上。S = "lumberjack"for c in S: print c # 最简单for i in range(len(S)): print S[i] # 太多了i = 0 # 太多了while i < len(S): print S[i]; i += 1不要试图从那些会改变对象的函数得到结果诸如像方法list.append()和list.sort()一类的直接改变操作会改变一个对象,但不会将它们改变的对象返回出来(它们会返回None);正确的做法是直接调用它们而不要将结果赋值。

经常会看见初学者会写诸如此类的代码:mylist = mylist.append(X)目的是要得到append的结果,但是事实上这样做会将None赋值给mylist,而不是改变后的列表。更加特别的一个例子是想通过用排序后的键值来遍历一个字典里的各个元素,请看下面的例子:D = {。

}for k in D.keys().sort(): print D[k]差一点儿就成功了——keys方法会创建一个keys的列表,然后用sort方法来将这个列表排序——但是因为sort方法会返回None,这个循环会失败,因为它实际上是要遍历None(这可不是一个序列)。要改正这段代码,将方法的调用分离出来,放在不同的语句中,如下:Ks = D.keys()Ks.sort()for k in Ks: print D[k]只有在数字类型中才存在类型转换在Python中,一个诸如123+3.145的表达式是可以工作的——它会自动将整数型转换为浮点型,然后用浮点运算。

但是下面的代码就会出错了:S = "42"I = 1X = S + I # 类型错误这同样也是有意而为的,因为这是不明确的:究竟是将字符串转换为数字(进行相加)呢,还是将数字转换为字符串(进行联接)呢?在Python中,我们认为“明确比含糊好”(即,EIBTI(Explicit is better than implicit)),因此你得手动转换类型:X = int(S) + I # 做加法: 43X = S + str(I) # 字符串联接: "421"循环的数据结构会导致循环尽管这在实际情况中很少见,但是如果一个对象的集合包含了到它自己的引用,这被称为循环对象(cyclic object)。如果在一个对象中发现一个循环,Python会输出一个[…],以避免在无限循环中卡住:>>> L = ['grail'] # 在 L中又引用L自身会>>> L.append(L) # 在对象中创造一个循环>>> L['grail', [。

]]除了知道这三个点在对象中表示循环以外,这个例子也是很值得借鉴的。因为你可能无意间在你的代码中出现这样的循环的结构而导致你的代码出错。

如果有必要的话,维护一个列表或者字典来表示已经访问过的对象,然后通过检查它来确认你是否碰到了循环。赋值语句不会创建对象的副本,仅仅创建引用这是Python的一个核心理念,有时候当行为不对时会带来错误。

在下面的例子中,一个列表对象被赋给了名为L的变量,然后L又在列表M中被引用。内部改变L的话,同时也会改变M所引用的对象,因为它们俩都指向同一个对象。

>>> L = [1, 2, 3] # 共用的列表对象>>> M = ['X', L, 'Y'] # 嵌入一个到L的引用>>> M['X', [1, 2, 3], 'Y']>>> L[1] = 0 # 也改变了M>>> M['X', [1, 0, 3], 'Y']通常情况下只有在稍大一点的程序里这就显得很重要了,而且这些共用的引用通常确实是你需要的。如果不是的话,你可以明确的给他们创建一个副本来避免共用的引用;对于列表来说,你可以通过使用一个空列表的切片来创建一个顶层的副本:>>> L = [1, 2, 3]>>> M = ['X', L[:], 'Y'] # 嵌入一个L的副本>>> L[1] = 0 # 仅仅改变了L,但是不影响M>>> L[1, 0, 3]>>> M['X', [1, 2, 3], 'Y']切片的范围起始从默认的0到被切片的序列的最大长度。

如果两者都省略掉了,那么切片会抽取该序。

pythonerror

转载请注明出处编程代码网 » pythonerror

资讯

python的作用

阅读(26)

本文主要为您介绍python的作用,内容包括学生学python的好处,python的作用是什么,Python语言的优点是什么?。1.简单:Python奉行简洁主义,易于读写,它使你能够专注于解决问题而不是去搞明白语言本身。2.免费:Python是开源软件。这意味着

资讯

后台python

阅读(29)

本文主要为您介绍后台python,内容包括python怎么让程序在后台执行,python程序后台运行怎么实现,如何在Windows下编写在后台一直运行的Python程序。使用python自带的GUI就可以实现,python自带TK,使用tk的mainloop就会让python程序一直运行,只要

资讯

python信号

阅读(33)

本文主要为您介绍python信号,内容包括Python数字信号处理程序实现求解,用Python做一个信号分析处理软件,python中signal函数的运用。数字信号处理是把信号用数字或符号表示成序列,通过计算机或通用(专用)信号处理设备,用数值计算方法进行各种处

资讯

升级macpython

阅读(30)

本文主要为您介绍升级macpython,内容包括mac怎么升级python版本,mac可以升级python吗知乎,如何更新Mac自带Python?。下载Python3.5 for Mac 一步步安装 安装的默认路径是:/Library/Frameworks/Python.framew

资讯

python3xp

阅读(33)

本文主要为您介绍python3xp,内容包括Python3.x和Python2.x的区别,python3.x里,\X和0X有什么区别,用python编写的程序怎么在xp系统下运行吗?。以下是Python3.x和Python2.x的主要区别1.性能Py3.0运行 pystone benchmark的速度比Py2.5慢30

资讯

pythonlambdafor

阅读(23)

本文主要为您介绍pythonlambdafor,内容包括pythonLambda形式的使用?,pythonlambda函数,python的lambda形式的理解。4.7.5. Lambda 形式出于实际需要,有几种通常在函数式编程语言例如 Lisp 中出现的功能加入到了 Python。通过 lam

资讯

python类实例

阅读(35)

本文主要为您介绍python类实例,内容包括谈谈python中类属性和类实例的属性的区别,python中类的实例对象的理解总结?,python类实例化。一般来说,在Python中,类实例属性的访问规则算是比较直观的。 但是,仍然存在一些不是很直观的地方,特别是对C

资讯

python删除文件

阅读(36)

本文主要为您介绍python删除文件,内容包括Python中如何删除一个文件,python怎么删除文件内容,在python中删除特定内容并输出到文件。文件操作不能删除里面的内容,只能新建一个文件,然后替换旧文件。下面的代码根据test,txt生成一个test1.txt

资讯

python的案例

阅读(28)

本文主要为您介绍python的案例,内容包括Python图像处理方面的文章或实例,python案例问题,求一个PYTHON案例。首先是基础理论,涉及到数学,概率,信号处理,机器学习等领域。基础只能慢慢积累。至于工具,入门的有PIL,但是PIL对底层像素操作支持的不

资讯

python的matplotlib

阅读(36)

本文主要为您介绍python的matplotlib,内容包括python是在matplotlib中画图吗,请问python该用什么matplotlib方法或方程得到这些信息?,matplotlib是什么?。matplotlib的pyplot子库提供了和matlab类似的绘图API,方便用户快速绘制2D图表。例子:[

资讯

pythonif多行

阅读(26)

本文主要为您介绍pythonif多行,内容包括python中if语句下可以有多个运行语句吗,PYTHON中的IFAND语句过长要怎么分行???,python怎么合并多行为一行?。python没有switch case语法,但是可以用其他方法来代替实现功能。比如要实现这样一段功能:sw

资讯

python脚本自动

阅读(25)

本文主要为您介绍python脚本自动,内容包括怎么自动调用python执行python脚本,如何使用Python编写自动登录的脚本,求解,python写的脚本,怎么在windows自动执行。#!/usr/bin/expect -fset password 12345678spawn ssh name@###.###.###e

资讯

python文件路径

阅读(21)

本文主要为您介绍python文件路径,内容包括python中txt文件路径怎么打开,怎么查找python3路径,python一般文件在哪个位置。linux下 可以先找到python的大致路径 然后执行 python -V 1 2 3 4 5 6 7 [root@host ~]#

资讯

python文件的路径

阅读(36)

本文主要为您介绍python文件的路径,内容包括python一般文件在哪个位置,python中txt文件路径怎么打开,python打开文件的路径。哦。这是个问题哟。好象是我也遇到过。似乎是一个开关。要允许打开空文件?还是什么的。或者是你回到上一级目录,点

资讯

pythonerror参数的函数(python出现这个错误是什么原因?)

阅读(54)

本文主要为您介绍pythonerror参数的函数,内容包括python出现这个错误是什么原因?,在python中error哪一类的是什么意思,warning,以及剩下的那些是什,如何解决的Python类型错误。搜集了一些python最重要的内建异常类名,并做了简单的介绍:Attrib

资讯

pythonerrorcode1(python出现这个错误是什么原因)

阅读(101)

本文主要为您介绍pythonerrorcode1,内容包括python出现这个错误是什么原因,python写代码中经常遇到的几种错误,python提示这个是什么原因。搜集了一些python最重要的内建异常类名,并做了简单的介绍:AttributeError:属性错误,特性引用和赋值失败