我有一个用python编写的脚本,它的工作方式如下所示。每个函数执行完全不同的任务,彼此不相关。我的问题是,如果函数2()在执行过程中出现问题,那么函数3()、函数4()、函数5()将不会执行。我知道你会说通过捕获异常来处理这个问题(尝试..except),但是我必须捕获不是我要查找的每个异常。简而言之,如果函数中的任何一个有问题,我如何在不影响其他函数的地方进行编码。理想情况下,它应该排除有问题的函数,让另一个函数执行。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21def function1():

some code

def function2():

some code

def function3():

some code

def function4():

some code

def function5():

some code

if __name__ == '__main__':

function1()

function2()

function3()

function4()

function5()

两种想法:你不必仅仅通过不命名具体的异常来捕捉每一个异常,对吧?我想这应该管用…或者只在function1()的末尾执行function2(),所以如果前面有错误,它不会走得太远,也不会提前中断。

如果异常处理是由代码长度引起的问题,您可以编写一个函数,将您的所有函数"包装"在像def wrap_em(func_list): for func in func_list: try: func except: continue这样的try - except块中。

@诺查丹玛斯-问题是我尝试了你刚才提到的。基本上,我的函数包含几个网络爬虫。所以我不确定我的功能何时会中断。因此,在这种情况下,根据哪个函数会有问题来堆积它们是行不通的。

@科尼斯-这是一个解决方案,但让我们看看其他人有什么要说的。

不需要写多个try/except。创建函数列表并执行它们。例如,您的代码应该如下所示:

1

2

3

4

5

6

7

8if __name__ == '__main__':

func_list = [function1, function2, function3, function4, function5]

for my_func in func_list:

try:

my_func()

except:

pass

或者,创建一个decorator并将该decorator添加到每个函数中。查看python函数修饰符指南。例如,您的装饰应该是:

1

2

3

4

5

6

7def wrap_error(func):

def func_wrapper(*args, **kwargs):

try:

return func(*args, **kwargs)

except:

pass

return func_wrapper

现在,将这个带有函数定义的装饰器添加为:

1

2

3@wrap_error

def function1():

some code

添加了这个修饰符的函数不会引发任何Exception。

我看到的唯一问题就是论点。不能向正在运行的函数传递参数。

@Ev.Kounis你可以。在这种情况下,您需要将其设置为dict,而不是list。Key是函数,value是参数。数据结构取决于要求:)

从python 3.4开始,添加了一个新的上下文管理器,名为contextlib.suppress,根据文档:

Return a context manager that suppresses any of the specified exceptions if they occur in the body of a with statement and then resumes execution with the first statement following the end of the with statement.

为了抑制所有异常,您可以将其用作:

1

2

3

4

5

6

7from contextlib import suppress

if __name__ == '__main__':

with suppress(Exception): # `Exception` to suppress all the exceptions

function1()

function2()

# Anything else you want to suppress

您可以使用异常并捕获类似于此的所有类型的异常

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17if __name__ == '__main__':

try:

function1()

except:

pass

try:

function2()

except:

pass

try:

function3()

except:

pass

try:

function4()

except:

pass

对于大量的函数,您可以使用

1

2

3

4

5

6

7

8

9

10func_dict = {

func1 : {

param1 : val

param2 : val

},

func1 : {

param1 : val

param2 : val

}

}

因此,可以迭代函数的字典键并迭代参数

据我所知,这是欧普明确表示他不想拥有的。

我所理解的是,他正计划写下每一个可能明确出现的例外。但相反,他能抓住所有的例外

因为我的函数包含大约15个网络爬虫,用这种方式编码并不是Python式的,所以这种方法是不可行的。

那么字典似乎是正确的方法

python中定义的函数不掉用不会执行_如果出现异常/错误,如何不在python中停止执行其他函数...相关推荐

  1. python传文件给堡垒机上远程的另一个机器_如何用hive调度堡垒机上的python脚本...

    工作中,如果我们本地要操作的数据量大,那么主机是跑不起来python脚本的,这个时候,就要用到服务器(也叫堡垒机)了.那么如何用HIVE调用堡垒机上的python脚本呢?今天小白就总结一下步骤和一些注 ...

  2. python设计程序输出一个带文本框和图像的窗体_设计一个文本框 用户在文本框中输入什么 窗体标题就同步显示什么 怎么设计啊...

    展开全部 要求 1.掌握算法的基本概念. 2.掌握基本数据结构及其操作. 3.掌握基本排序和查找算法. 4.掌握逐e68a8462616964757a686964616f31333264626533步 ...

  3. python编写自定义函数判断n1-n2范围内的素数_【每日道代码题001】- PYTHON基础复习...

    问题001-1:请对输入三个整数a,b,c,判断能否以它们为三个边长构成三角形.若能,输出YES和面积,否则输出NO a = float(input()) b = float(input()) c = ...

  4. python中的def语句输出1000以内的回文_各种方法测试回文的性能[Python]

    使用timeit模块进行速度测试,使用profile模块进行性能统计,使用dis模块进行字节码反汇编. 下面的脚本演示了如何使用模块. 从输出中注意到的一件事是函数调用的数量会影响整体性能(当然,字节 ...

  5. php 异常错误信息用处,关于PHP中异常错误的处理详细介绍

    1. 错误报告级别 error_reporting()error_reporting(int $level); PHP 5.4 及以上 E_ALL 包含了 E_STRICT. PHP Manual 所 ...

  6. Python程序设计与科学计算精录总结Episode.2 Python基础语法:函数、模块、内置数据结构、面向对象知识总结(基于Michael导师Python课程与VS2019)

    Jupyter Notebook是基于网页的用于交互计算的应用程序.其可被应用于全过程计算:开发.文档编写.运行代码和展示结果.这个名字就很讲究,Jupyter改自木星的英文单词Jupiter,其中包 ...

  7. MATLAB中定义数组序列,matlab怎么定义一个数组

    A=[]; n=input('n=');%数组的长度 for i=1:n fprintf('a%.0f=',i); x=input('');%分别输入各个数的值 A=[A,x]; end A 就可以得 ...

  8. c语言 引用定义变量,如何在c语言中定义及引用全局变量?

    如何在c语言中定义及引用全局变量? 答案:5  信息版本:手机版 解决时间 2019-10-03 10:30 已解决 2019-10-02 15:19 如何在c语言中定义及引用全局变量? 最佳答案 2 ...

  9. vs报错 已经在 helpers.obj 中定义

    已经在 helpers.obj 中定义 1>正在生成代码... 1>localizer.obj : error LNK2005: "class std::vector<cl ...

最新文章

  1. 使用相对路径时,./、../、../../,代表的什么?
  2. flask 作为 three.js 的服务器
  3. NGUI从入门到实战1.2NGUI的主要特性
  4. 【深度学习】深度学习之对抗样本问题和知识蒸馏技术
  5. http --- 路由器缓存与常见的状态码
  6. #191 sea(动态规划)
  7. 利用Python读取外部数据文件
  8. Linux Basics command
  9. 前端页面加载速度优化---Ngnix之GZIP压缩
  10. Xamarin 开发Android应用简易教程
  11. VS2015安装Visual C++的Win32控制台应用程序
  12. ERD Online 4.0.0 免费私有部署方案
  13. Java字节码角度分析方法调用 ——提升硬实力7
  14. Java学习笔记(三):流程控制
  15. 掷骰子java程序_掷骰子游戏窗体实现--Java初级小项目
  16. 【前端】html综合案例:圣诞节的那些事、小说排行榜案例、注册页面
  17. python的难点在哪里_python厉害在哪里?看看python大牛怎么说
  18. 视频教程-React全栈:前后端分离的招聘Web App项目(含资料)-ReactJS
  19. Sheets与WorkSheets的区别
  20. sdut 算符优先系列之(一)Firstvt和Lastvt集

热门文章

  1. 第一篇博客,用以规划我的编程人生
  2. 一:redis 的string类型 - 相关操作
  3. sign python_python机器学习
  4. vlan之间互相访问_VLAN的划分和网络的配置实例
  5. cad批量偏移_学会这12个CAD制图命令,走遍天下都不怕,有没有兴趣?
  6. 前端传值后端接收不到_解决vue get请求传参后端接收不到参数值(java sptingboot)
  7. java date 转换calendar_Java中日期格式(String、Date、Calendar)的相互转换
  8. python 读取文件
  9. matlab完全自学一本通 pdf,matlab r2014a自学一本通 MATLAB R2014a完全自学一本通 中文pdf扫描版[125MB] 下载-脚本之家...
  10. java 内存溢出 内存泄露_java 内存泄露、内存溢出、内存不足