Python3 notas de estudo _E (anormal, depuração)


código de notas pode ser executado em Jupyter Notebook (experiência realmente Jupyter-lab é grande).

Recomendado para não olhar, para ser mais mãos para bater código. Olho mais de mil era melhor mão lê-lo novamente.

notas relacionadas Jupiter executar código foram carregados, descarregados a partir de seus próprios recursos.

Erros e exceções

'''
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 várias exceções

'''
将异常名放入元组中存储
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
异常测试结束

nidificação incomum

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

exceção personalizada

'''raise'''

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

Manipulação de exceção para lançar uma exceção

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

depuração

impressão

o mais fácil

Afirmação (Assert)

No programa pode usar impressão local nele com afirmações (assert)

assert expression, throwException

expressão expressão deve ser verdadeira, caso contrário, jogue AssertionError: throwException

python -O fileName.py Fechar afirmações

# 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!
exploração madeireira

Este artigo sumaria os módulos para uma boa comum, tem referência. ligação guia

Endereço: https: //www.cnblogs.com/wf-linux/archive/2018/08/01/9400354.html

logging não lançar uma exceção, você pode saída de informações de depuração para um arquivo

informações do registro de log também pode especificar o nível (debug, info, aviso, erro)

Especificar level = INFOquando logging.debugele falhar, os outros níveis definir empatia.

registrando através de uma configuração simples, de saída para uma declaração, ao mesmo tempo em lugares diferentes, tais como: console e arquivo.

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 explicação:

Nível de registo: nível
filename: arquivo de log
fileMode: arquivo de log modo aberto
formato: Formato Logging

Parâmetros: papel
% (levelno) s: imprimir valor do nível de log
% (levelname) s: o nome do nível de registo de impressão
% (path) s: caminho de impressão atualmente em execução do programa, na verdade, o sys.argv [0]
% (filename) s: Imprimir execução nome do programa
% (funcname) s: a função atual do log de impressão
% (lineno) d: impressão log do número da linha atual
% (asctime) s: tempo de impressão log
% (thread) d: Print fio ID
% (threadName) s: print nome rosca
% (processo) d: print processo ID
% (a mensagem) s: informações do registo de impressão

# 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
pdb depuração

pdb depurador tem uma falha óbvia é para multi-threaded remoto depuração e outros apoios não era bom o suficiente,

E não há nenhuma exibição interface mais intuitiva, não é adequado para grande projeto de python.

Instrução de Operação pdb

comando logograma função comentário
pausa b Definir um ponto de interrupção não
continuar c Continuar a execução do programa não
Lista eu Ver linha de código atual não
degrau s Digite a função não
Retorna r Execução de código a partir da atual até que a função retorna não
Sair q Rescisão e saída não
Próximo n A próxima linha não
impressão p Imprimir valores de variáveis não
Socorro h Ajuda não
args uma Ver parâmetros de entrada não
  entrar último comando Repeat não
pausa b Mostrar todos os pontos de interrupção não
lineno pausa b lineno Definir um ponto de interrupção na linha especificada não
arquivo de pausa: lineno b file: lineno Definir um ponto de interrupção na linha do arquivo especificado não
num claro   Excluir os pontos de interrupção especificadas O número da linha num aqui não é para adicionar um ponto de interrupção, mas o número de pontos de interrupção
bt   Ver chamada de função quadro de pilha não

APO depurador interativo

pdb importação

pdb.run (funcname (atributo)) # onde s necessidade de imprensa no APO, em seguida, L pode, ou não irá exibir o código

APO programa de ponto enterrado

pdb importação

pdb.set_trace () # Quando o programa encontra estas palavras ao entrar no comissionamento

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

Acho que você gosta

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