Python3 notas de estudio _E (anormal, depuración)


Código de notas se puede ejecutar en Jupyter cuaderno (experiencia de realidad Jupyter-lab es grande).

Recomendado para no ver, para ser más manos para golpear código. Ojo más de un millar era mejor a la mano leyó de nuevo.

Júpiter ejecutar código notas relacionadas se han cargado, descargado de sus propios recursos.

Los errores y excepciones

'''
try: # 在try中的异常后的代码不会执行,程序会跳转到except中对异常进行处理
    pass # 需要捕获异常的代码块
except ExceptName as result: # 捕获异常ExceptName并将异常重命名为result
    pass # 对捕获异常的处理代码块
[
except Exp1 as result1: # except 捕获语句可以有多条,不冲突即可
    pass
...
]

Exception :是异常总和,所有异常都可被此异常捕获

当捕获的异常和设定的异常名称不对应时,会进行系统异常处理。

try: # 开启捕获
    pass
except Exp: # 捕获到异常时执行
    pass
else: # 没有捕获到异常时执行
    pass
finally: # 收尾工作,不论是否捕获到异常都会执行
    pass
'''

Capturar múltiples excepciones

'''
将异常名放入元组中存储
try:
    pass
except (err1, err2 [,err...]):
    pass
'''
# 异常 多个异常 例子
try:
    1/0
    open("sss0")
except NameError:
    print("try中出现NameError的异常")
except Exception as result:
    print("这里出现一个笼统的异常,{}".format(result))
else:
    print("try中没有异常时打印")
finally:
    print("不管try中是否有异常,都会执行finally")
print("异常测试结束")
# 例子结束
这里出现一个笼统的异常,division by zero
不管try中是否有异常,都会执行finally
异常测试结束

anidación inusual

'''
内部try未捕获到异常,向外部逐层传递
try:
    try:
        pass
    except Exp1:
        pass
    pass
except Exp2:
    pass
'''

excepción personalizada

'''raise'''

# 用户自定义异常例子
class UserError(Exception):
    def __init__(self):
        print("这里是用户自定义的异常")
try:
    raise UserError
except UserError:
        print("抛出自定义异常")
else:
     print("没有异常")
# 例子结束
这里是用户自定义的异常
抛出自定义异常

Tratamiento de excepciones a lanzar una excepción

'''
try:
    Error
except exception as result:
    if (pass):
        pass # 开启捕获异常
        print(result)
    else:
        pass # 重写抛出异常,此时的异常不会被捕获,交由系统处理
        raise
'''

depuración

impresión

la forma más fácil

Aserción (assert)

En el programa se puede utilizar en la impresión local con afirmaciones (afirman)

assert expression, throwException

expresión de expresión debe ser verdad, de lo contrario, tirar AssertionError: ThrowException

python -O fileName.py Cerrar afirmaciones

# assert 例子
def judger(name):
    # name!='username'为True,继续运行,False抛出your name is error!异常
    assert name != 'username','your name is error!'
    print('123456')
    
def main():
    judger('username')
    
if __name__=='__main__':
    main()
    
---------------------------------------------------------------------------

AssertionError                            Traceback (most recent call last)

<ipython-input-1-4fda0f972b48> in <module>()
      9 
     10 if __name__=='__main__':
---> 11     main()
     12 


<ipython-input-1-4fda0f972b48> in main()
      6 
      7 def main():
----> 8     judger('username')
      9 
     10 if __name__=='__main__':


<ipython-input-1-4fda0f972b48> in judger(name)
      2 def judger(name):
      3     # name!='username'为True,继续运行,False抛出your name is error!异常
----> 4     assert name != 'username','your name is error!'
      5     print('123456')
      6 


AssertionError: your name is error!
Inicio sesión

Este artículo resume los módulos de bien común, tiene como referencia. guía de enlace

Dirección: https: //www.cnblogs.com/wf-linux/archive/2018/08/01/9400354.html

tala no produce una excepción, puede salida de información de depuración en un archivo

información de registro de registro también puede especificar el nivel (depuración, información, advertencia, error)

Especifican level = INFOcuando logging.debugse produce un error, los demás niveles establecidos empatía.

el registro a través de una sencilla configuración, la salida a una declaración al mismo tiempo en diferentes lugares, tales como: consola y archivo.

import logging

logging.basicConfig(level=[INFO,DEBUG,WARNING,ERROR,CRITICAL],
                               filename="your_log_file_name",
                               filemode='r,w,a',
                               format='your_log_format')

Parámetros explicación:

Nivel de registro: nivel
de nombre de archivo: archivo de registro
fileMode: archivo de registro de modo abierto
formato: Formato de registro

Parámetros: papel
% (levelno) s: la impresión de valor del nivel de registro
% (levelname) s: el nombre del nivel de registro de impresión
% (ruta) s: ruta de impresión del programa que se está ejecutando, de hecho, el sys.argv [0]
% (nombre del archivo) s: Imprimir ejecución de nombre de programa
% (nombre de función) s: función actual del registro de impresión
% (lineno) d: la impresión del registro del número de línea actual
% (asctime) s: tiempo de impresión de registro
% (thread) d: Imprimir hilo ID
% (threadName) s: impresión nombre hilo
% (proceso) d: Imprimir proceso ID
% (el mensaje) s: información de registro de impresión

# logging 简单例子
import logging


file_name='./Gnerate_files/logging_test.log'
logging.basicConfig(
    level=logging.INFO,
    filename=file_name,
    filemode='w+', # 这里针对本例子使用w,但是日志记录时不建议使用w
    format='%(lineno)s\t%(asctime)s: %(name)s: %(levelname)s: %(message)s')

logger = logging.getLogger(name=__name__)

logger.info("Start print log INFO")
logger.debug("Start print log DEBUG")
logger.warning("Start print log WARNING")
logger.info("the print log INFO is end")

print("日志文件内容:")
with open(file_name, 'r', encoding='utf-8', buffering=1024) as file:
    lines = file.readlines()
    for line in lines:
        print(line)

日志文件内容:
14	2020-02-07 13:18:03,459: __main__: INFO: Start print log INFO

16	2020-02-07 13:18:03,460: __main__: WARNING: Start print log WARNING

17	2020-02-07 13:18:03,460: __main__: INFO: the print log INFO is end
'''logger中添加StreamHandler,可以将日志输出到屏幕上'''
# 将日志同时输出到屏幕和日志文件例子
import logging

file_name = './Gnerate_files/logging_test_f_c.log'
loggerc = logging.getLogger(__name__)
loggerc.setLevel(level=logging.INFO)
handler = logging.FileHandler(file_name, mode='w+', encoding='utf-8')
handler.setLevel(logging.INFO)
formatter = logging.Formatter(
    '%(asctime)s: %(name)s %(levelname)s %(message)s')
handler.setFormatter(formatter)

console = logging.StreamHandler()
console.setLevel(logging.INFO)
loggerc.addHandler(handler)
loggerc.addHandler(console)

loggerc.info("Start print log INFO")
loggerc.debug("Start print log DEBUG")
loggerc.warning("Start print log WARNING")
loggerc.info("the print log INFO is end")

print("日志文件内容:")
with open(file_name, 'r', encoding='utf-8', buffering=1024) as file:
    lines = file.readlines()
    for line in lines:
        print(line)
Start print log INFO
Start print log WARNING
the print log INFO is end


日志文件内容:
2020-02-07 13:18:10,353: __main__ INFO Start print log INFO

2020-02-07 13:18:10,355: __main__ WARNING Start print log WARNING

2020-02-07 13:18:10,356: __main__ INFO the print log INFO is end
depuración AP

AP depurador tiene una falla obvia es para multi-hilo de depuración remota y otro tipo de apoyo no era lo suficientemente bueno,

Y no hay visualización de la interfaz más intuitiva, no es adecuado para el proyecto pitón grande.

instrucción de operación de AP

comando logograma función comentario
descanso si Establecer un punto de interrupción no
Seguir C Continuar la ejecución del programa no
lista l Ver línea de código actual no
paso s Entrar en la función no
regreso r Ejecución de código a partir de la corriente hasta que la función devuelve no
dejar q Terminación y salida no
siguiente norte La siguiente línea no
impresión pag Imprimir valores de las variables no
ayuda h Ayuda no
args un Ver los parámetros de entrada no
  entrar Repetir el último comando no
descanso si Mostrar todos los puntos de interrupción no
lineno ruptura b lineno Establecer un punto de interrupción en la línea especificada no
archivo de ruptura: lineno b archivo: lineno Establecer un punto de interrupción en la línea del archivo especificado no
num clara   Eliminar los puntos de referencia especificados El número de línea num aquí no es añadir un punto de interrupción, pero el número de puntos de ruptura
bt   Ver función de llamada marco de pila no

AP depurador interactivo

AP importación

pdb.run (nombreFunc (atributo)) # donde s necesidad de prensa en el AP entonces L puede, o no quiere mostrar el código

AP programa de punto enterrada

AP importación

pdb.set_trace () # Cuando el programa se encuentra con estas palabras al entrar en la puesta en marcha

发布了13 篇原创文章 · 获赞 0 · 访问量 25

Supongo que te gusta

Origin blog.csdn.net/qq_34764582/article/details/104940438
Recomendado
Clasificación