Diretório do artigo
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 = INFO
quando logging.debug
ele 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 LoggingParâ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