From b8bec9b7154b5108773616346ec1e6868f90d262 Mon Sep 17 00:00:00 2001 From: xujian Date: Tue, 5 Dec 2023 06:39:02 +0000 Subject: [PATCH 1/2] =?UTF-8?q?update=20=E7=BC=96=E7=A0=81=E8=A7=84?= =?UTF-8?q?=E8=8C=83/openKylin-python=E8=AF=AD=E8=A8=80=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E7=BC=96=E7=A8=8B=E8=A7=84=E8=8C=83.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xujian --- ...26\347\250\213\350\247\204\350\214\203.md" | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git "a/\347\274\226\347\240\201\350\247\204\350\214\203/openKylin-python\350\257\255\350\250\200\351\200\232\347\224\250\347\274\226\347\250\213\350\247\204\350\214\203.md" "b/\347\274\226\347\240\201\350\247\204\350\214\203/openKylin-python\350\257\255\350\250\200\351\200\232\347\224\250\347\274\226\347\250\213\350\247\204\350\214\203.md" index d1b42a5..d823370 100644 --- "a/\347\274\226\347\240\201\350\247\204\350\214\203/openKylin-python\350\257\255\350\250\200\351\200\232\347\224\250\347\274\226\347\250\213\350\247\204\350\214\203.md" +++ "b/\347\274\226\347\240\201\350\247\204\350\214\203/openKylin-python\350\257\255\350\250\200\351\200\232\347\224\250\347\274\226\347\250\213\350\247\204\350\214\203.md" @@ -88,6 +88,57 @@ yield和return语句只有在函数的上下文中才有意义。在函数外使 while True: break +## 规则1.6 所有的except异常处理都应该能够捕获异常(python:S1045) +异常处理程序(except块)按照它们编写的顺序进行评估。一旦找到匹配项,评估过程停止。 +在某些情况下,后面的异常处理程序是无效代码,因为它永远无法捕获任务异常: +1、一个基类异常处理程序后面跟着一个派生自该基类的类的异常处理程序,那么第二个异常处理程序将永远不会被触发。 +2、多个异常处理程序尝试捕获相同的异常类时,只有第一个异常处理程序将被触发 +3、在python 3中,BaseException类是所有异常类的父类,当前面的异常处理程序捕获了BaseException时,后面跟者一个裸的except异常处理程序(即没有表达式的异常处理except:),则后面裸的异常处理程序将无法捕获任何异常。 +### 错误代码 + def foo(): + try: + raise FloatingPointError() + except (ArithmeticError, RuntimeError) as e: + print(e) + except FloatingPointError as e: # Noncompliant. FloatingPointError is a subclass of ArithmeticError + print("Never executed") + except OverflowError as e: # Noncompliant. OverflowError is a subclass of ArithmeticError + print("Never executed") + + try: + raise TypeError() + except TypeError as e: + print(e) + except TypeError as e: # Noncompliant. Duplicate Except. + print("Never executed") + + try: + raise ValueError() + except BaseException as e: + print(e) + except: # Noncompliant. This is equivalent to "except BaseException" block + print("Never executed") + +### 正确代码 + def foo(): + try: + raise FloatingPointError() + except FloatingPointError as e: + print("Executed") + except OverflowError as e: + print("Executed") + except (ArithmeticError, RuntimeError) as e: + print(e) + + try: + raise TypeError() + except TypeError as e: + print(e) + + try: + raise ValueError() + except BaseException as e: + print(e) # 2 错误和异常 ## 规则2.1 异常应该从Exception类派生(python:S5632) -- Gitee From 3aeee2c5ef600124647e8bd19218fc1450c8edae Mon Sep 17 00:00:00 2001 From: xujian Date: Tue, 5 Dec 2023 06:40:35 +0000 Subject: [PATCH 2/2] =?UTF-8?q?update=20=E7=BC=96=E7=A0=81=E8=A7=84?= =?UTF-8?q?=E8=8C=83/openKylin-python=E8=AF=AD=E8=A8=80=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E7=BC=96=E7=A8=8B=E8=A7=84=E8=8C=83.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xujian --- ...26\347\250\213\350\247\204\350\214\203.md" | 103 +++++++++--------- 1 file changed, 52 insertions(+), 51 deletions(-) diff --git "a/\347\274\226\347\240\201\350\247\204\350\214\203/openKylin-python\350\257\255\350\250\200\351\200\232\347\224\250\347\274\226\347\250\213\350\247\204\350\214\203.md" "b/\347\274\226\347\240\201\350\247\204\350\214\203/openKylin-python\350\257\255\350\250\200\351\200\232\347\224\250\347\274\226\347\250\213\350\247\204\350\214\203.md" index d823370..44903b0 100644 --- "a/\347\274\226\347\240\201\350\247\204\350\214\203/openKylin-python\350\257\255\350\250\200\351\200\232\347\224\250\347\274\226\347\250\213\350\247\204\350\214\203.md" +++ "b/\347\274\226\347\240\201\350\247\204\350\214\203/openKylin-python\350\257\255\350\250\200\351\200\232\347\224\250\347\274\226\347\250\213\350\247\204\350\214\203.md" @@ -88,57 +88,6 @@ yield和return语句只有在函数的上下文中才有意义。在函数外使 while True: break -## 规则1.6 所有的except异常处理都应该能够捕获异常(python:S1045) -异常处理程序(except块)按照它们编写的顺序进行评估。一旦找到匹配项,评估过程停止。 -在某些情况下,后面的异常处理程序是无效代码,因为它永远无法捕获任务异常: -1、一个基类异常处理程序后面跟着一个派生自该基类的类的异常处理程序,那么第二个异常处理程序将永远不会被触发。 -2、多个异常处理程序尝试捕获相同的异常类时,只有第一个异常处理程序将被触发 -3、在python 3中,BaseException类是所有异常类的父类,当前面的异常处理程序捕获了BaseException时,后面跟者一个裸的except异常处理程序(即没有表达式的异常处理except:),则后面裸的异常处理程序将无法捕获任何异常。 -### 错误代码 - def foo(): - try: - raise FloatingPointError() - except (ArithmeticError, RuntimeError) as e: - print(e) - except FloatingPointError as e: # Noncompliant. FloatingPointError is a subclass of ArithmeticError - print("Never executed") - except OverflowError as e: # Noncompliant. OverflowError is a subclass of ArithmeticError - print("Never executed") - - try: - raise TypeError() - except TypeError as e: - print(e) - except TypeError as e: # Noncompliant. Duplicate Except. - print("Never executed") - - try: - raise ValueError() - except BaseException as e: - print(e) - except: # Noncompliant. This is equivalent to "except BaseException" block - print("Never executed") - -### 正确代码 - def foo(): - try: - raise FloatingPointError() - except FloatingPointError as e: - print("Executed") - except OverflowError as e: - print("Executed") - except (ArithmeticError, RuntimeError) as e: - print(e) - - try: - raise TypeError() - except TypeError as e: - print(e) - - try: - raise ValueError() - except BaseException as e: - print(e) # 2 错误和异常 ## 规则2.1 异常应该从Exception类派生(python:S5632) @@ -256,6 +205,58 @@ yield和return语句只有在函数的上下文中才有意义。在函数外使 except Exception: logging.exception("Failed") # Ignore all "Exception" subclasses yet allow SystemExit and other important exceptions to pass +## 规则2.3 所有的except异常处理都应该能够捕获异常(python:S1045) +异常处理程序(except块)按照它们编写的顺序进行评估。一旦找到匹配项,评估过程停止。 +在某些情况下,后面的异常处理程序是无效代码,因为它永远无法捕获任务异常: +1、一个基类异常处理程序后面跟着一个派生自该基类的类的异常处理程序,那么第二个异常处理程序将永远不会被触发。 +2、多个异常处理程序尝试捕获相同的异常类时,只有第一个异常处理程序将被触发 +3、在python 3中,BaseException类是所有异常类的父类,当前面的异常处理程序捕获了BaseException时,后面跟者一个裸的except异常处理程序(即没有表达式的异常处理except:),则后面裸的异常处理程序将无法捕获任何异常。 +### 错误代码 + def foo(): + try: + raise FloatingPointError() + except (ArithmeticError, RuntimeError) as e: + print(e) + except FloatingPointError as e: # Noncompliant. FloatingPointError is a subclass of ArithmeticError + print("Never executed") + except OverflowError as e: # Noncompliant. OverflowError is a subclass of ArithmeticError + print("Never executed") + + try: + raise TypeError() + except TypeError as e: + print(e) + except TypeError as e: # Noncompliant. Duplicate Except. + print("Never executed") + + try: + raise ValueError() + except BaseException as e: + print(e) + except: # Noncompliant. This is equivalent to "except BaseException" block + print("Never executed") + +### 正确代码 + def foo(): + try: + raise FloatingPointError() + except FloatingPointError as e: + print("Executed") + except OverflowError as e: + print("Executed") + except (ArithmeticError, RuntimeError) as e: + print(e) + + try: + raise TypeError() + except TypeError as e: + print(e) + + try: + raise ValueError() + except BaseException as e: + print(e) + # 3 参数与返回值 ## 规则3.1 __init__函数不应该有显示返回值(python:S2734) 在python中,__init__函数是一个特殊的方法,用于在创建类的实例时进行初始化操作。它没有显示的返回值,而是隐式的返回新创建的实例对象。 -- Gitee