该网站有程序错误-阅读后,可以扫码加入知识星球社区讨论

在程序运行过程中,如果发生错误,可以事先同意返回错误代码,以便知道是否存在错误以及错误的原因。通常会在操作系统提供的调用中返回错误代码。例如,打开文件的函数 open() 如果成功,则返回文件描述符(即整数),失败时返回 -1。

使用错误代码来指示是否存在错误非常不方便,

因为函数本身应该返回的正常结果与错误代码混合在一起,导致调用方不得不使用大量代码来确定是否存在错误:

def foo():
    r = some_function()
    if r==(-1):
        return (-1)
    # do something
    return r
def bar():
    r = foo()
    if r==(-1):
        print('Error')
    else:
        pass

一次错误

发生时,一次报告一个级别,直到函数可以处理错误(例如,向用户输出错误消息)。

所以中间语言一般都有一套外部的try...除了。。。最后。。。错误处理机制,Python也不例外。

尝试

让我们用一个反例来看看 try 的机制:

try:
    print('try...')
    r = 10 / 0
    print('result:', r)
except ZeroDivisionError as e:
    print('except:', e)
finally:
    print('finally...')
print('END')

当我们觉得个别代码可能有错的时候,我们可以用 try 运行这段代码,如果执行错误,后续代码不会继续执行,而是直接跳转到错误处理代码,即句子块除外,执行后除外,如果有 finally 句子块,则执行 finally 句子块, 至此,执行已完成。

当估计 10/0 时,里面的代码会形成一个加法错误:

try...
except: division by zero
finally...
END

从输出中可以看出,当发生错误时,后续句子 print('result:',r) 不会被执行,除非被执行,因为它捕获了 ZeroDivisionError。最后,执行最后的判决。之后,程序继续按照流程工作。

如果除数 0 更改为 2,则执行结果如下:

该网站有程序错误-阅读后,可以扫码加入知识星球社区讨论

try...
result: 5
finally...
END

因为没有发生错误,所以 except 句子块不会被执行,而如果 finally 发生,它将被执行(不能有 finally 句子)。

你也可以推测应该有多种类型的错误,如果发生不同类型的错误,应该由不同的句子块来处理。没错,可以有多个例外来捕获不同类型的错误:

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 的错误当然也是类,所有的错误类型都是从 BaseException 继承而来的,所以在使用 exclude 时,需要注意的是,它不仅会捕获这种类型的错误,还会“捕获其所有泛型”。如:

try:
    foo()
except ValueError as e:
    print('ValueError')
except UnicodeError as e:
    print('UnicodeError')

第二个 except 永远不会捕获 UnicodeError,因为 UnicodeError 是 ValueError 的泛型,如果它捕获,它也会被第一个除外捕获。

所有 Python 错误都派生自 BaseException 类,常见的错误类型和继承如下所示:

使用尝试...except 捕获错误的另一个巨大好处是它可以跨越多个调用,例如函数 main() 调用 bar(),bar() 调用 foo(),并且 foo() 的结果是错误的,在这种情况下,只要 main() 捕获就可以处理 main()

def foo(s):
    return 10 / int(s)
def bar(s):
    return foo(s) * 2
def main():
    try:
        bar('0')
    except Exception as e:
        print('Error:', e)
    finally:
        print('finally...')

换句话说,您不需要在每个可能出错的地方捕获错误,只需在正确的级别捕获它们即可。这样,写作尝试...除了。。。终于麻烦了。

调用堆栈

如果错误没有被抓到,

还是会抛出来,最后被Python类库抓到,复制一条错误消息,然后程序退出。让我们来看看 err.py:

# err.py:
def foo(s):
    return 10 / int(s)
def bar(s):
    return foo(s) * 2
def main():
    bar('0')
main()

执行,结果如下:

$ python3 err.py
Traceback (most recent call last):
  File "err.py", line 11, in 
    main()
  File "err.py", line 9, in main
    bar('0')
  File "err.py", line 6, in bar
    return foo(s) * 2
  File "err.py", line 3, in foo
    return 10 / int(s)
ZeroDivisionError: division by zero

犯错并不可怕,不知道出了什么问题很可怕。剖析错误消息是查找错误的关键。我们可以从上到下看到整个错误调用函数链:

错误消息第 1 行:

Traceback (most recent call last):

告诉我们这是不正确的跟踪信息。

第2~3行:

  File "err.py", line 11, in 
    main()

调用main()出错了,在代码文件 err.py 的第11行,但原因是第9行:

  File "err.py", line 9, in main
    bar('0')

调用 bar('0') 在代码文件 err.py 的第 9 行出错,但原因是第 6 行:

  File "err.py", line 6, in bar
    return foo(s) * 2

原因是句子 returnfoo(s)*2 是错误的,但这不是最终的触发因素,继续阅读:

  File "err.py", line 3, in foo
    return 10 / int(s)

原因是句子 return10/int(s) 是错误的,这是错误的源头,由于下面的副本:

ZeroDivisionError: integer division or modulo by zero

根据错误类型 ZeroDivisionError,我们确定 int(s) 本身没有错误,但 int(s) 返回 0,估计 10/0 时发生错误该网站有程序错误,并找到错误来源。

出错的时候,一定要分析错误的调用栈信息,才能定位错误的位置。

记录错误

如果错误是

没有被抓到,Python协程自然可以复制错误栈,但程序也结束了。现在我们可以捕获错误,我们可以复制错误堆栈,分析错误的原因,然后让程序继续。

Python 的外部日志记录模块可以轻松记录错误消息:

# err_logging.py
import logging
def foo(s):
    return 10 / int(s)
def bar(s):
    return foo(s) * 2
def main():
    try:
        bar('0')
    except Exception as e:
        logging.exception(e)
main()
print('END')

发生同样的错误,但程序在复制错误信息后会继续执行并正常退出:

$ python3 err_logging.py
ERROR:root:division by zero
Traceback (most recent call last):
  File "err_logging.py", line 13, in main
    bar('0')
  File "err_logging.py", line 9, in bar
    return foo(s) * 2
  File "err_logging.py", line 6, in foo
    return 10 / int(s)
ZeroDivisionError: division by zero
END

通过配置,日志记录还可以在日志文件中记录错误,以便于事后故障排除。

抛出错误

由于错误是一个类,因此捕获

错误正在捕获该类的实例。出于这个原因,错误不是突然形成的,而是故意创造和抛出的。Python 的外部函数会抛出许多类型的错误,我们自己的编程函数也会抛出错误。

如果要抛出错误,请先定义一个错误的类,选择一个好的继承,然后抛出一个带有 raise 句子的错误示例:

# err_raise.py
class FooError(ValueError):
    pass
def foo(s):
    n = int(s)
    if n==0:
        raise FooError('invalid value: %s' % s)
    return 10 / n
foo('0')

执行,终于可以追踪到我们自己定义的错误:

$ python3 err_raise.py 
Traceback (most recent call last):
  File "err_throw.py", line 11, in 
    foo('0')
  File "err_throw.py", line 8, in foo
    raise FooError('invalid value: %s' % s)
__main__.FooError: invalid value: 0

仅在必要时定义我们自己的错误类型。如果可以在 Python 中选择现有的外部错误类型(例如 ValueError、TypeError),请尝试使用 Python 的外部错误类型。

最后,让我们看一下另一种错误处理方法:

# err_reraise.py
def foo(s):
    n = int(s)
    if n==0:
        raise ValueError('invalid value: %s' % s)
    return 10 / n
def bar():
    try:
        foo('0')
    except ValueError as e:
        print('ValueError!')
        raise
bar()

在 bar() 函数中,我们已经捕获了错误,但是在复制了一个 ValueError!之后,我们通过 raise 句子抛出错误,这不是病态吗?

尽管这些错误处理方法不仅没有病态,而且很常见。捕获错误的目的只是记录它们以供后续跟踪。而且,由于当前函数不知道如何处理错误,因此最合适的方法是不断抛出它并让顶级调用者处理它。比如,当一个员工处理不了问题时,他把问题扔给老板,如果老板处理不了,他还是会扔掉,最终会扔给CEO处理。

如果 raise 句子没有参数,则当前错误将被抛出。据悉,在 except 中引发错误也会将一种类型的错误转换为另一种类型的错误:

try:
    10 / 0
except ZeroDivisionError:
    raise ValueError('input error!')

只要它是合理的转换逻辑,它就不应该将IOError转换为无关的ValueError。

实践

运行下面的代码,根据异常信息进行分析该网站有程序错误,找到错误来源,并修复

# -*- coding: utf-8 -*-
----
from functools import reduce
def str2num(s):
    return int(s)
def calc(exp):
    ss = exp.split('+')
    ns = map(str2num, ss)
    return reduce(lambda acc, x: acc + x, ns)
def main():
    r = calc('100 + 200 + 345')
    print('100 + 200 + 345 =', r)
    r = calc('99 + 88 + 7.6')
    print('99 + 88 + 7.6 =', r)
main()

总结

Python 外部尝试...除了。。。最后,非常容易地处理错误。发生错误时,剖析错误消息并找到发生错误的代码至关重要。

程序还可以主动抛出错误,让调用方处理相应的错误。此外,您应该在文档中清楚地写下可能引发的错误以及错误的原因。

参考源代码

do_try.py

err.py

err_logging.py

err_raise.py

err_reraise.py

个性化、快速且可访问谷歌在

一,超级易于使用的软件概述 谷歌浏览器是由谷歌开发的简单,高效的网络浏览工具。Chrome Android Chrome Google Chrome的特点是简单和快速。谷歌浏览器支持多标签页浏览,每个标签页在单独的“沙盒”中运行,在提高安全性的同时,一个标签页的崩溃不会导致其他标签页被关闭。此外,Google Chrome基于更强大的JavaScript V8引擎,这是当前Web浏览器无法实现的。还有移动版的Chrome浏览器,它在2012年发布了Chrome浏览器连接版,为IOS系统、Android系统和Windows Phone系统提供了Chrome浏览器,在保持浏览器原有特性的同时,实现了浏览器的多终端使用,具有共享收藏历史信息的功能,这对移动浏览器来说是一个巨大的突破。随着Android系统的份额不断扩大,市场份额也不断下降。Chrome基于开源引擎WebKit,Blink,并包含Microsoft Gears。Chrome提供了一个浏览器扩展框架,可以使混合应用程序类似于Adobe-AIR。

该网站有程序错误-阅读后,可以扫码加入知识星球社区讨论

包括 V8 Javascript 虚拟机,这是一个多线程虚拟机,可加速 Javascript 执行。 •具有隐私浏览模式,允许用户在不登录本地计算机的情况下使用它,类似于Google IE8中的隐身。浏览器将受到外部保护,免受“网络钓鱼和恶意软件”功能的侵害。谷歌在其官方博客中宣布,将在Chrome 25的测试版中添加Web Speech API,允许用户在嵌入JavaScript的页面中更方便地使用语音命令,听写和其他功能。同时,新版本还改进了内容安全策略标头,开发者可以创建网页和资源的白名单,以提高浏览器的安全性。谷歌浏览器,又称谷歌浏览器,是由谷歌公司开发的免费网络浏览器,“铬”是化学元素“铬”的中文名称;过去,Chrome也被用来指代浏览器的外框架。该软件的代码基于其他开源软件,包括WebKit和Mozilla,目的是提高稳定性,速度和安全性,并创建简单高效的用户界面。

该软件的名称来自网络浏览器的图形用户界面(GUI),也称为“Chrome”。软件优势:不易崩溃最新版本的谷歌浏览器Chrome的最大亮点是其多进程架构,可保护浏览器免受恶意网页和应用程序造成的崩溃。每个选项卡、窗口和插件都在自己的环境中运行,因此一个站点的问题不会影响其他站点的打开。这通过在封闭环境中将每个站点和应用软件限制在这些体系结构中,进一步增强了系统的安全性。快速使用 WebKit 引擎。WebKit 简单紧凑,可以有效地使用内存,使新开发人员可以轻松入门。Chrome 具有 DNS 预拦截功能。浏览网站时怎么看网站的程序,“谷歌浏览器”可以查询或预拦截页面上所有链接的IP地址。着陆页。Chrome 具有 GPU 硬件加速功能:激活 GPU 硬件加速后,使用“Google Chrome”浏览这些图像丰富的网站会渲染速度更快,滚动时不会出现图像损坏。2013年4月,谷歌宣布将为Chrome开发自己的浏览器引擎Blink,该引擎已经即将在最新的Chrome开发版本中发布。[7]几乎是隐身的,Chrome的界面非常简单,可以说它是多么简单。

该网站有程序错误-阅读后,可以扫码加入知识星球社区讨论

Chrome 几乎不像一个应用程序,绝大多数屏幕用于显示用户访问的网站,Chrome 按钮和徽标不会显示在屏幕上。Chrome的设计师表示,他们希望用户忘记他们正在使用浏览器软件,他们的目标已经基本实现。Chrome 的 Search Simple 标志性功能之一是多功能框——位于浏览器底部的通用工具栏。用户可以在多功能框中输入网站地址或搜索关键字,或者同时输入这三者,Chrome 将手动执行所需的操作。例如,如果用户喜欢使用 PCWorld 网站的搜索功能,一旦用户访问该网站,Chrome 就会记住 PCWorld 网站有自己的搜索框,让用户选择是否使用该网站的搜索功能。如果用户选择使用PCWorld网站的搜索功能,系统将手动执行搜索操作。Chrome 为选项卡式浏览提供了新功能。用户可以“抓取”选项卡并将其拖放到单独的窗口中。用户可以在单个窗口中合并多个选项卡。Chrome 可以配置用户在启动时喜欢的特定选项卡,其他浏览器需要第三方插件来提供此功能。黑名单:Google Chrome 会定期更新其黑名单以避免网络钓鱼和恶意软件,并在用户尝试浏览可能导致笔记本电脑损坏的网站时发出警告。

此服务也可通过使用其他称为“Google 安全浏览 API”的免费应用程序套接字 (API) 获得。在更新和维护此黑名单的同时,Google还会通知包含的网站,以防止网站所有者自己不知道该网站包含恶意软件。沙盒:Google Chrome 中的每个标签页都是一个沙盒,以避免“恶意软件损坏用户的系统”或“使用标签页影响其他标签页”。通过坚持最小权限原则,每个操作的权限都会受到限制,并且只能执行操作,而无需写入文件和从敏感区域(例如“我的文档”、“桌面”)读取文件。沙盒团队是一种恶意软件,它声称他们“利用对运行程序的现有限制并将这些限制带入拘留中心”,例如在其中一个选项卡中运行的恶意软件将难以显示信用卡号、干扰键盘或告诉系统在启动时运行程序,并且恶意软件将在选项卡关闭后立即终止。插件:插件通常没有统一的标准,很难像选项卡一样沙盒化。这些通常需要在浏览器本身的安全级别或更高级别运行。为了增加被爆炸击中的风险,插件独立运行。从5.0版本开始,“Google Chrome”内置了Adobe Flash Player,以确保使用最新版本来增加被击中的风险。

该网站有程序错误-阅读后,可以扫码加入知识星球社区讨论

后来,在

在9.0版本中,Flash播放器被放置在沙盒中并独立运行。这项技术是Chrome安全进步的一个里程碑。这对Windows XP用户很重要,因为它是平台上唯一在沙箱中提供Flash嵌入的浏览器。从8.0版本开始,“谷歌浏览器”内置于在沙盒中独立运行的PDF阅读器中。多处理:可以让多个程序同时运行而互不影响,每个web标签独立于窗口程序存在,当资源不足或崩溃时,整个程序不会因暂停而丢失。任务管理器:一个非常独特的工具,用户可以看到哪些网站占用的视频内存最多,下载流量和CPU资源,有利于管理各种标签和插件,也很容易让用户终止恶意操作。诈骗和恶意软件防护:Google Chrome 在检测到浏览网站可能有害时会发出实时警告。浏览器会将访问网址的一部分传输给 Google,以查看它是否列在盗窃和恶意网站列表中。(网络网络钓鱼和恶意软件检测功能)。自动更新:为确保您受到最新安全更新的保护,Google Chrome 会定期检测更新,以确保更新始终是最新版本。更新检测可确保使用最新版本的安全功能和修补程序,并且浏览器无需任何用户操作即可使用新版本手动更新,并在下次启动时手动使用。专业评估HTML5测试

HTML5测试(3张),CSS3测试Acid1和Acid2顺利通过。此前,它在 Acid3 中只拿到了 78 分,最新的 beta 版已经达到了 100 分,一些 WebKit 核心浏览器已经达到了 100 分。CSS3 选择器测试中的所有 578 个项目都通过了。HTML5评测支持W3C最新的网页合约HTML5且表现良好,支持HTML5视频编号格式,H.264OggTheoraWebM版本发布,2015年8月21日发布(44.0.2403.157)[1] 1.修复部分网页加载缓慢的问题,正式版(44.0.2403.155)于2015年8月11日发布 1.对内部审计采取各种纠正、模糊测试等措施;2.提高运行速率、安全性、稳定性和硬件兼容性;3.大大提高了64位版Chrome的安全性;4.增强Chrome64位版的稳定性,渲染器处理崩溃率大幅提升;5.内置组件Adobe Flash Player更新至v18.0.0.232正式版;发布于 四月 15怎么看网站的程序, 2015 (42.0.2311.90) [8] 1.内置的Adobe Flash Player已更新到17.0.0.1692,增加了海量应用程序扩展和Web平台API3,软件性能和稳定性得到了极大的提升4。Chrome 42正式停止支持NPAPI插件。现在默认安装仅支持 5 个 PPAPI 插件5,致敬“生命、宇宙、万物终极答案”!(根据道格拉斯·亚当斯(Douglas Adams)的小说《银河系漫游指南》(The Hitchhiker's Guide to the Galaxy),42是“对生命、宇宙和任何事情的终极答案。

因此,数字42经常被用作对这部作品的致敬)正式版(37.0.2062.103)于9月3日下午发布,

该网站有程序错误-阅读后,可以扫码加入知识星球社区讨论

2014 [9] 此版本于 9 月 3 日下午首次发布,更新编号为 37.0.2062.119(平台版本 5978.80.0/5978.81.0)。新减少的功能有:1.多用户登录支持(Multi Sign),使多账户切换更加方便;2.应用程序信息可以在Chrome启动器中查看(应用程序信息);3.设置窗口不再出现在新选项卡中;4.隐身模式增加了“保存到谷歌云端硬盘”功能;5. 客户端证书管理可以通过chrome.enterprise.platformKeys API使用;6、书签管理(管理书签)——推送和管理您的书签;7.新的减少密码管理工具。2014年1月14日正式版(32.0.1700.76)发布的Chrome 32.0.1700.76包括以下bug修复和体验改进: 1.在音频,视频,相机等选项卡上显示相应的图标;2、Win8地铁模式新形象;3.自动阻止恶意软件;4. 提供一些新的应用或扩展的 API;5.更多的中间功能。

2013 年 12 月 5 日 (31.0.1650.63

) 发布的 Chrome 31.0.1650.63 包含 15 个安全修复,例如同步会话的 302 定位、v8 缓冲区溢出、模式对话框中的地址栏欺诈......Chrome 31 支持网络支付,Web 开发人员可以在用户授权的情况下通过程序调用浏览器的手动填充数据。这样,在进行支付时,用户可以直接选择存储在浏览器中的数据或通过浏览器界面输入新的支付信息,开发者可以继续现有的支付流程。Chrome 31还添加了一个新的可移植本机客户端(PNaCl),它允许开发人员一劳永逸地编译,以便在任何硬件平台上运行。2013年10月16日 Chrome 30 (30.0.1599.101) 发布:修复了 5 个安全漏洞和一些旧版本中的错误,提高了浏览器性能。2013年8月20日,Chrome 29正式版(Chrome 29.0.1547.57)发布:1.根据您之前访问过的网站改进了多功能框建议;2.您可以将个人资料重置为之前的状态;3. 许多新的应用程序和扩展的 API;4.大量的稳定性和性能改进;5. 修复与安全相关的问题。七月 10, 2013 Chrome 28 新版本功能: 1.使用眨眼内核;2. 开始支持通知中心服务。2013

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站程序 该网站有程序错误-阅读后,可以扫码加入知识星球社区讨论 https://www.wkzy.net/game/130013.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务