У меня есть 2 файла. В одном из них скрипт (вызов функции из другого файла) компилируется и выполняется. Мне нужно определить, где произошла ошибка: была ли ошибка при создании сценария (в какой строке скрипта) в user_script.py, или это была ошибка в функции foo (parameter).Где произошла ошибка? exec (compile (script, "<string>", 'exec'))
Я хочу, чтобы поймать любые ошибки (SyntaxError, TypeError, и т.д.) и обращаться с ними по-разному в зависимости от того, произошло ли это в себе или в функции Foo (параметр) сценария
я показываю два примера с NameError, но в Я хочу сделать то же самое с любыми ошибками. На какие атрибуты я должен ссылаться, чтобы различать их?
Пример 1
user_script.py
import sys
import traceback
from Catch_errors.my_function import function
script="a=1\nb=3\nfunction.foo(c)"
exec(compile(script,"<string>",'exec'))
my_function.py
class function:
def foo(parameter):
a = parameter
print(a) # or e.g. causing the error print(a+'sss')
Выход:
Traceback (most recent call last):
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0\helpers\pydev\pydevd.py", line 2199, in <module>
globals = debugger.run(setup['file'], None, None)
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0\helpers\pydev\pydevd.py", line 1638, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/Support/PycharmProjects/HelloWorldProject/Catch_errors/user_Script.py", line 7, in <module>
exec(compile(script,"<string>",'exec'))
File "<string>", line 3, in <module>
NameError: name 'c' is not defined
Пример 2
user_script.py
import sys
import traceback
from Catch_errors.my_function import function
script="a=1\nb=3\nfunction.foo(2)"
exec(compile(script,"<string>",'exec'))
my_function.py
class function:
def foo(parameter):
a = parameter
print(b)
Выход:
Traceback (most recent call last):
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0\helpers\pydev\pydevd.py", line 2199, in <module>
globals = debugger.run(setup['file'], None, None)
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0\helpers\pydev\pydevd.py", line 1638, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/Support/PycharmProjects/HelloWorldProject/Catch_errors/user_Script.py", line 5, in <module>
script="a=1\nb=3\nfunction.foo("+b+")"
NameError: name 'b' is not defined
Кроме того, было бы полезно, если вы отправляете именно свою ошибку. –
Нет, что вы предлагаете неправильно.Это вызывает TypeError, тогда как моя версия работает правильно. Однако я не ищу способ создания правильных скриптов, а хочу поймать любые возможные ошибки, которые мог бы сделать пользователь. Я хочу поймать любые ошибки (SyntaxError, TypeError и т. Д.) И обрабатывать их по-разному в зависимости от того, произошло ли это в самом скрипте или в функции 'foo (parameter)' – Spu
Если ваш 'script' не компилировался, вы бы получите «SyntaxError». Показывая, что фактическая трассировка позволит нам помочь вам гораздо лучше. –